调农商行前置测通
diff --git a/config/application-devel-pg-xkx.properties b/config/application-devel-pg-xkx.properties
index f4202ad..85ffa70 100644
--- a/config/application-devel-pg-xkx.properties
+++ b/config/application-devel-pg-xkx.properties
@@ -11,6 +11,8 @@
spring.datasource.username=admin
spring.datasource.password=123456
database.dbtype=postgresql
+
+logging.level.org.hibernate.SQL=ERROR
# Redis settings
spring.redis.host=localhost
spring.redis.port=16379
@@ -25,7 +27,8 @@
##################################################
## quartz task scheduler
shopbalance.updater.cron=-
-download.ynrcc.chkfile.cron =3 0/2 * * * ?
+#download.ynrcc.chkfile.cron =3 0/2 * * * ?
+query.third.transdtl.result.cron=7 0/1 * * * ?
#############################################
spring.cloud.consul.enabled=false
spring.cloud.consul.host=172.28.201.70
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryTransDtlResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryTransDtlResponse.java
index 118bd56..16e27d0 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryTransDtlResponse.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryTransDtlResponse.java
@@ -19,4 +19,5 @@
private String payinfo;
private String reverseFlag;
private String transdesc;
+ private String remark;
}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/DlpayResp.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/DlpayResp.java
index bc9510a..4e90b51 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/DlpayResp.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/DlpayResp.java
@@ -1,9 +1,5 @@
package com.supwisdom.dlpay.agent.citizencard;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-
-@XmlRootElement(name = "root")
public class DlpayResp {
private String code;
private String message;
@@ -17,7 +13,6 @@
private String trxdate; //银行记账日期
private Integer amount; //查询时返回流水金额
- @XmlElement(name = "CODE")
public String getCode() {
return code;
}
@@ -26,7 +21,6 @@
this.code = code;
}
- @XmlElement(name = "MESSAGE")
public String getMessage() {
return message;
}
@@ -35,7 +29,6 @@
this.message = message;
}
- @XmlElement(name = "TRANSDATE")
public String getTransdate() {
return transdate;
}
@@ -44,7 +37,6 @@
this.transdate = transdate;
}
- @XmlElement(name = "TRANSTIME")
public String getTranstime() {
return transtime;
}
@@ -53,7 +45,6 @@
this.transtime = transtime;
}
- @XmlElement(name = "BANKJOURNO")
public String getBankjourno() {
return bankjourno;
}
@@ -62,7 +53,6 @@
this.bankjourno = bankjourno;
}
- @XmlElement(name = "SINSTATUS")
public String getSinstatus() {
return sinstatus;
}
@@ -71,7 +61,6 @@
this.sinstatus = sinstatus;
}
- @XmlElement(name = "CAPTCHA")
public String getCaptcha() {
return captcha;
}
@@ -80,7 +69,6 @@
this.captcha = captcha;
}
- @XmlElement(name = "STATUS")
public String getStatus() {
return status;
}
@@ -89,7 +77,6 @@
this.status = status;
}
- @XmlElement(name = "FILENAME")
public String getFilename() {
return filename;
}
@@ -98,7 +85,6 @@
this.filename = filename;
}
- @XmlElement(name = "TRXDATE")
public String getTrxdate() {
return trxdate;
}
@@ -107,7 +93,6 @@
this.trxdate = trxdate;
}
- @XmlElement(name = "AMOUNT")
public Integer getAmount() {
return amount;
}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java
index 4c8a23d..db5c54b 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/citizencard/YnrccUtil.java
@@ -69,6 +69,7 @@
errcode.add(Pair.of(AgentCode.SHORT_OF_BALANCE, new YnrccRespCode("0302", "余额不足")));
errcode.add(Pair.of(AgentCode.SERVER_INTERNAL_ERROR, new YnrccRespCode("0303", "MD5校验失败")));
errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0304", "该卡号已经解约,不允许重复解约")));
+
errcode.add(Pair.of(AgentCode.REFNO_NOT_EXISTS, new YnrccRespCode("0401", "原始流水不存在")));
errcode.add(Pair.of(AgentCode.FAIL, new YnrccRespCode("0402", "原始流水未成功")));
errcode.add(Pair.of(AgentCode.FAIL, new YnrccRespCode("0403", "原始流水已退款")));
@@ -77,6 +78,15 @@
errcode.add(Pair.of(AgentCode.SUCCESS, new YnrccRespCode("0406", "当日无交易明细")));
errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0407", "非大理市民卡,不允许交易")));
errcode.add(Pair.of(AgentCode.FAIL, new YnrccRespCode("0408", "同一请求流水号不允许重复提交")));
+ errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0409", "商户卡号为空")));
+ errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0410", "商户户名错")));
+ errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0411", "退款金额大于原代扣金额")));
+ errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0412", "退款金额大于剩余可退金额")));
+ errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0413", "不允许该类型的商户账户交易")));
+ errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0414", "退款时请输入原应用系统唯一流水号")));
+ errcode.add(Pair.of(AgentCode.ILLEGAL_DATA, new YnrccRespCode("0415", "交易金额大于单笔限额")));
+ errcode.add(Pair.of(AgentCode.SERVER_INTERNAL_ERROR, new YnrccRespCode("0416", "通用限额未配置")));
+
errcode.add(Pair.of(AgentCode.COMMON_ERROR, new YnrccRespCode("4444", "其他错误")));
errcode.add(Pair.of(AgentCode.REQUIRE_QUERY, new YnrccRespCode(CODE_EXCEPTION, "待查询")));
errcode.add(Pair.of(AgentCode.SERVER_INTERNAL_ERROR, new YnrccRespCode(PARAM_CONFIG_ERROR, "{message}")));
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/service/impl/SourceTypeServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/api/service/impl/SourceTypeServiceImpl.java
index 545f848..14631ee 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/service/impl/SourceTypeServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/service/impl/SourceTypeServiceImpl.java
@@ -40,7 +40,7 @@
@Override
@Cacheable(cacheNames = "dictionary_cache", key = "@tenantHolder.genKey('sourcetype', #sourceType)")
public TSourceType getBySourceType(String sourceType) {
- return sourceTypeDao.getOne(sourceType);
+ return sourceTypeDao.getBySourceType(sourceType);
}
@Override
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java
index c9bf7e0..632ffde 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/filter/CrosXssFilter.java
@@ -41,15 +41,11 @@
//sql,xss过滤
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
- logger.info("CrosXssFilter.......orignal url:{},ParameterMap:{}",
- httpServletRequest.getRequestURI(),
- new Gson().toJson(httpServletRequest.getParameterMap()));
+// logger.info("CrosXssFilter.......orignal url:{},ParameterMap:{}", httpServletRequest.getRequestURI(), new Gson().toJson(httpServletRequest.getParameterMap()));
XssHttpServletRequestWrapper xssHttpServletRequestWrapper = new XssHttpServletRequestWrapper(
httpServletRequest);
chain.doFilter(xssHttpServletRequestWrapper, response);
- logger.info("CrosXssFilter..........doFilter url:{},ParameterMap:{}",
- xssHttpServletRequestWrapper.getRequestURI(),
- new Gson().toJson(xssHttpServletRequestWrapper.getParameterMap()));
+// logger.info("CrosXssFilter..........doFilter url:{},ParameterMap:{}", xssHttpServletRequestWrapper.getRequestURI(), new Gson().toJson(xssHttpServletRequestWrapper.getParameterMap()));
}
@Override
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
index 586d819..4278bf0 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/citizencard_service.kt
@@ -52,7 +52,7 @@
override fun pay(transaction: TTransactionMain): AgentResponse<DtlStatus> {
val resp = citizencardPayService.cardPay(transaction.shopDtl.shopaccno, transaction.personDtl.userid, transaction.accdate,
- MoneyUtil.YuanToFen(transaction.personDtl.amount), transaction.refno)
+ Math.abs(MoneyUtil.YuanToFen(transaction.personDtl.amount)), transaction.refno)
return AgentResponse<DtlStatus>().also {
val code = agentCode(resp.code, resp.message)
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
index 2eddc6b..c6c763a 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
@@ -3,6 +3,7 @@
import com.google.gson.Gson
import com.sun.jersey.api.client.Client
import com.sun.jersey.api.client.ClientResponse
+import com.sun.jersey.core.util.MultivaluedMapImpl
import com.supwisdom.dlpay.agent.citizencard.DlpayResp
import com.supwisdom.dlpay.api.service.CardService
import com.supwisdom.dlpay.api.service.SourceTypeService
@@ -64,29 +65,32 @@
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,
- "categorie" to YnrccUtil.DLPAY_CATEGORIE,
- "refno" to refno,
- "bankcardno" to bankcardno,
- "username" to username,
- "idtype" to idType,
- "idno" to idno,
- "phone" to phone,
- "sign_type" to "MD5"
- ))
+ params["transcode"] = YnrccUtil.BANKCARD_BIND_TRANSCODE
+ params["transdate"] = systime.hostdate
+ params["transtime"] = systime.hosttime
+ params["categorie"] = YnrccUtil.DLPAY_CATEGORIE
+ params["refno"] = refno
+ params["bankcardno"] = bankcardno
+ params["username"] = username
+ params["idtype"] = idType.toString()
+ params["idno"] = idno
+ params["phone"] = phone
+ params["sign_type"] = "MD5"
val sign = MD5.encodeByMD5(StringUtil.createLinkString(StringUtil.paraFilter(params)) + config[YnrccUtil.YNRCC_SIGNKEY]!!.trim())
params["sign"] = sign
+
+ val postData = MultivaluedMapImpl()
+ params.forEach { (t, u) -> postData.add(t, u) }
+
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)
+ val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).accept(MediaType.APPLICATION_JSON).post(ClientResponse::class.java, postData)
return if (200 == respClient.status) {
- resp = respClient.getEntity(DlpayResp::class.java)
- logger.error("refno=[$refno], url=[$url], return=[" + Gson().toJson(resp) + "]")
+ val jsonStr = respClient.getEntity(String::class.java)
+ logger.error("refno=[$refno], url=[$url], return=[$jsonStr]")
+ resp = Gson().fromJson(jsonStr, DlpayResp::class.java)
resp
} else {
resp.code = "99"
@@ -119,30 +123,33 @@
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"
- ))
+ params["transcode"] = YnrccUtil.BANKCARD_SIGN_TRANSCODE
+ params["transdate"] = systime.hostdate
+ params["transtime"] = systime.hosttime
+ params["refno"] = refno
+ params["categorie"] = YnrccUtil.DLPAY_CATEGORIE
+ params["transtype"] = transtype
+ params["bankcardno"] = bankcardno
+ params["username"] = username
+ params["idtype"] = idType.toString()
+ params["idno"] = idno
+ params["phone"] = phone
+ params["sign_type"] = "MD5"
val sign = MD5.encodeByMD5(StringUtil.createLinkString(StringUtil.paraFilter(params)) + config[YnrccUtil.YNRCC_SIGNKEY]!!.trim())
params["sign"] = sign
+
+ val postData = MultivaluedMapImpl()
+ params.forEach { (t, u) -> postData.add(t, u) }
+
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)
+ val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).accept(MediaType.APPLICATION_JSON).post(ClientResponse::class.java, postData)
return if (200 == respClient.status) {
- resp = respClient.getEntity(DlpayResp::class.java)
- logger.error("refno=[$refno], url=[$url], return=[" + Gson().toJson(resp) + "]")
+ val jsonStr = respClient.getEntity(String::class.java)
+ logger.error("refno=[$refno], url=[$url], return=[$jsonStr]")
+ resp = Gson().fromJson(jsonStr, DlpayResp::class.java)
resp
} else {
resp.code = "99"
@@ -195,33 +202,36 @@
val systime = systemUtilService.sysdatetime
val params = hashMapOf<String, String>()
- params.plus(mapOf(
- "transcode" to YnrccUtil.BANKCARD_PAY_TRANSCODE,
- "transdate" to accdate, //我们的记账日期
- "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"
- ))
+ params["transcode"] = YnrccUtil.BANKCARD_PAY_TRANSCODE
+ params["transdate"] = accdate
+ params["transtime"] = systime.hosttime
+ params["refno"] = refno
+ params["categorie"] = YnrccUtil.DLPAY_CATEGORIE
+ params["bankcardno"] = bankcardno
+ params["username"] = person.name
+ params["idtype"] = idType.toString()
+ params["idno"] = person.idno
+ params["merchant_bankcardno"] = merchantBankcardno!!
+ params["merchant_bankaccname"] = merchantBankaccname!!
+ params["amount"] = amount.toString()
+ params["description"] = "市民卡代扣消费"
+ params["sign_type"] = "MD5"
val sign = MD5.encodeByMD5(StringUtil.createLinkString(StringUtil.paraFilter(params)) + config[YnrccUtil.YNRCC_SIGNKEY]!!.trim())
params["sign"] = sign
+
+ val postData = MultivaluedMapImpl()
+ params.forEach { (t, u) -> postData.add(t, u) }
+
val url = config[YnrccUtil.YNRCC_ANGENT_URL]!!.trim() + "/cardpay"
logger.error("url=[$url], params=[" + Gson().toJson(params) + "]")
try {
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)
+ val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).accept(MediaType.APPLICATION_JSON).post(ClientResponse::class.java, postData)
return if (200 == respClient.status) {
- resp = respClient.getEntity(DlpayResp::class.java)
- logger.error("refno=[$refno], url=[$url], return=[" + Gson().toJson(resp) + "]")
+ val jsonStr = respClient.getEntity(String::class.java)
+ logger.error("refno=[$refno], url=[$url], return=[$jsonStr]")
+ resp = Gson().fromJson(jsonStr, DlpayResp::class.java)
resp
} else {
resp.code = "99"
@@ -247,27 +257,30 @@
val systime = systemUtilService.sysdatetime
val params = hashMapOf<String, String>()
- params.plus(mapOf(
- "transcode" to YnrccUtil.BANKCARD_PAYREFUND_TRANSCODE,
- "transdate" to accdate, //我们的记账日期
- "transtime" to systime.hosttime,
- "refno" to refno,
- "refundRefno" to orignRefno,
- "amount" to amount,
- "description" to "市民卡代扣消费退款",
- "sign_type" to "MD5"
- ))
+ params["transcode"] = YnrccUtil.BANKCARD_PAYREFUND_TRANSCODE
+ params["transdate"] = accdate //我们的记账日期
+ params["transtime"] = systime.hosttime
+ params["refno"] = refno
+ params["refundRefno"] = orignRefno
+ params["amount"] = amount.toString()
+ params["description"] = "市民卡代扣消费退款"
+ params["sign_type"] = "MD5"
val sign = MD5.encodeByMD5(StringUtil.createLinkString(StringUtil.paraFilter(params)) + config[YnrccUtil.YNRCC_SIGNKEY]!!.trim())
params["sign"] = sign
+
+ val postData = MultivaluedMapImpl()
+ params.forEach { (t, u) -> postData.add(t, u) }
+
val url = config[YnrccUtil.YNRCC_ANGENT_URL]!!.trim() + "/cardpayrefund"
logger.error("url=[$url], params=[" + Gson().toJson(params) + "]")
try {
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)
+ val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).accept(MediaType.APPLICATION_JSON).post(ClientResponse::class.java, postData)
return if (200 == respClient.status) {
- resp = respClient.getEntity(DlpayResp::class.java)
- logger.error("refno=[$refno], url=[$url], return=[" + Gson().toJson(resp) + "]")
+ val jsonStr = respClient.getEntity(String::class.java)
+ logger.error("refno=[$refno],refundRefno=[$orignRefno], url=[$url], return=[$jsonStr]")
+ resp = Gson().fromJson(jsonStr, DlpayResp::class.java)
resp
} else {
resp.code = "99"
@@ -294,25 +307,28 @@
val systime = systemUtilService.sysdatetime
val refno = systemUtilService.refno
val params = hashMapOf<String, String>()
- params.plus(mapOf(
- "transcode" to YnrccUtil.BANKCARD_QUERYRESULT_TRANSCODE,
- "transdate" to systime.hostdate,
- "transtime" to systime.hosttime,
- "refno" to refno,
- "orignRefno" to orignRefno,
- "sign_type" to "MD5"
- ))
+ params["transcode"] = YnrccUtil.BANKCARD_QUERYRESULT_TRANSCODE
+ params["transdate"] = systime.hostdate
+ params["transtime"] = systime.hosttime
+ params["refno"] = refno
+ params["orignRefno"] = orignRefno
+ params["sign_type"] = "MD5"
val sign = MD5.encodeByMD5(StringUtil.createLinkString(StringUtil.paraFilter(params)) + config[YnrccUtil.YNRCC_SIGNKEY]!!.trim())
params["sign"] = sign
+
+ val postData = MultivaluedMapImpl()
+ params.forEach { (t, u) -> postData.add(t, u) }
+
val url = config[YnrccUtil.YNRCC_ANGENT_URL]!!.trim() + "/queryresult"
logger.error("url=[$url], params=[" + Gson().toJson(params) + "]")
try {
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)
+ val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).accept(MediaType.APPLICATION_JSON).post(ClientResponse::class.java, postData)
return if (200 == respClient.status) {
- resp = respClient.getEntity(DlpayResp::class.java)
- logger.error("refno=[$orignRefno], url=[$url], return=[" + Gson().toJson(resp) + "]")
+ val jsonStr = respClient.getEntity(String::class.java)
+ logger.error("refno=[$orignRefno], url=[$url], return=[$jsonStr]")
+ resp = Gson().fromJson(jsonStr, DlpayResp::class.java)
resp
} else {
resp.code = "99"
@@ -338,25 +354,28 @@
val systime = systemUtilService.sysdatetime
val refno = systemUtilService.refno
val params = hashMapOf<String, String>()
- params.plus(mapOf(
- "transcode" to YnrccUtil.BANKCARD_CHKFILE_TRANSCODE,
- "transdate" to systime.hostdate,
- "transtime" to systime.hosttime,
- "refno" to refno,
- "checkdate" to checkdate,
- "merchant_bankcardno" to merchantBankcardno,
- "sign_type" to "MD5"
- ))
+ params["transcode"] = YnrccUtil.BANKCARD_CHKFILE_TRANSCODE
+ params["transdate"] = systime.hostdate
+ params["transtime"] = systime.hosttime
+ params["refno"] = refno
+ params["checkdate"] = checkdate
+ params["merchant_bankcardno"] = merchantBankcardno ?: ""
+ params["sign_type"] = "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"
+
+ val postData = MultivaluedMapImpl()
+ params.forEach { (t, u) -> postData.add(t, u) }
+
+ val url = config[YnrccUtil.YNRCC_ANGENT_URL]!!.trim() + "/checkdtl"
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)
+ val respClient = client.resource(url).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).accept(MediaType.APPLICATION_JSON).post(ClientResponse::class.java, postData)
return if (200 == respClient.status) {
- resp = respClient.getEntity(DlpayResp::class.java)
- logger.error("refno=[$refno], url=[$url], return=[" + Gson().toJson(resp) + "]")
+ val jsonStr = respClient.getEntity(String::class.java)
+ logger.error("refno=[$refno],chkdate=[$checkdate], url=[$url], return=[$jsonStr]")
+ resp = Gson().fromJson(jsonStr, DlpayResp::class.java)
resp
} else {
resp.code = "99"
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt
index ff9510d..a9fbfa0 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt
@@ -12,6 +12,7 @@
import com.supwisdom.dlpay.framework.service.SystemUtilService
import com.supwisdom.dlpay.framework.tenant.TenantContext
import com.supwisdom.dlpay.framework.util.ApplicationUtil
+import com.supwisdom.dlpay.framework.util.Constants
import com.supwisdom.dlpay.framework.util.TradeDict
import com.supwisdom.dlpay.util.ConstantUtil
import mu.KotlinLogging
@@ -95,6 +96,8 @@
@Async("queryAgentPayResult")
fun queryResult(transaction: TTransactionMain, qcnt: Int) {
try {
+ if (null == TenantContext.getTenantSchema()) TenantContext.setTenantSchema(transaction.tenantid)
+
if (qcnt >= YnrccUtil.QUERY_MAX_COUNT) {
//查询超最大次数
logger.error("查询refno=[${transaction.refno}]流水结果超最大查询次数[${YnrccUtil.QUERY_MAX_COUNT}]")
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
index b62c990..f10bf3b 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
@@ -70,7 +70,7 @@
return ResponseEntity.ok(ResponseBodyBuilder.create()
.success(QueryTransDtlResponse(it.refno, it.outTradeNo, it.shopDtl.amount,
it.status, it.sourceType, it.personDtl.payinfo, it.reverseFlag,
- it.shopDtl.transdesc), "查询成功"))
+ it.shopDtl.transdesc,it.personDtl.remark), "查询成功"))
} ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
.fail(TradeErrorCode.TRANSACTION_NOT_EXISTS, "流水不存在"))
}
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 32dc699..32c43b6 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
@@ -9,6 +9,7 @@
import com.supwisdom.dlpay.framework.ResponseBodyBuilder
import com.supwisdom.dlpay.framework.service.SystemUtilService
import com.supwisdom.dlpay.framework.tenant.TenantContext
+import com.supwisdom.dlpay.framework.util.Constants
import com.supwisdom.dlpay.framework.util.DateUtil
import com.supwisdom.dlpay.framework.util.StringUtil
import com.supwisdom.dlpay.framework.util.SysparaUtil
@@ -37,7 +38,7 @@
@PostMapping("/datasync")
fun daliDatasync(@RequestBody param: DaliDatasyncParam): ResponseEntity<Any> {
try {
- if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema("{tenantid}") //fixme: tenantid设置
+ if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID) //fixme: tenantid设置
param.checkParam()
val appid = systemUtilService.getSysparaValue(SysparaUtil.DLCARDMANAGER_APPID)
val appkey = systemUtilService.getSysparaValue(SysparaUtil.DLCARDMANAGER_SECRET)
@@ -130,7 +131,7 @@
}
try {
- if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema("{tenantid}") //fixme: tenantid设置
+ if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID) //fixme: tenantid设置
val txtFile = File(filename)
val batchSize = 1000
var sumCount = 0
@@ -218,7 +219,7 @@
}
try {
- if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema("{tenantid}") //fixme: tenantid设置
+ if (TenantContext.getTenantSchema() == null) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID) //fixme: tenantid设置
var totalcnt = 0
var failcnt = 0
var detailMsg = ""
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/card_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/card_service_impl.kt
index 4610ef7..5a26d56 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/card_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/card_service_impl.kt
@@ -32,6 +32,8 @@
TradeDict.STATUS_LOST == cityCard.transStatus -> throw TransactionProcessException(TradeErrorCode.ACCOUNT_IS_LOSS, "市民卡[$cardno]已经挂失!")
TradeDict.STATUS_FROZEN == cityCard.transStatus -> throw TransactionProcessException(TradeErrorCode.ACCOUNT_IS_FROZEN, "市民卡[$cardno]已经冻结!")
TradeDict.STATUS_LOCKED == cityCard.transStatus -> throw TransactionProcessException(TradeErrorCode.ACCOUNT_IS_LOCKED, "市民卡[$cardno]已被锁定!")
+ TradeDict.STATUS_UNUSE == cityCard.transStatus -> throw TransactionProcessException(TradeErrorCode.ACCOUNT_IS_LOCKED, "市民卡[$cardno]未启用!")
+ TradeDict.STATUS_ABNORMAL == cityCard.transStatus -> throw TransactionProcessException(TradeErrorCode.ACCOUNT_IS_LOCKED, "市民卡[$cardno]状态异常!")
}
}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
index 2a8c984..5b109df 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
@@ -11,6 +11,7 @@
import com.supwisdom.dlpay.exception.TransactionProcessException
import com.supwisdom.dlpay.framework.service.SystemUtilService
import com.supwisdom.dlpay.framework.tenant.TenantContext
+import com.supwisdom.dlpay.framework.util.MoneyUtil
import com.supwisdom.dlpay.framework.util.Subject
import com.supwisdom.dlpay.framework.util.TradeDict
import com.supwisdom.dlpay.framework.util.TradeErrorCode
@@ -373,6 +374,13 @@
?: throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR,
"系统异常,无法处理退款流水")
originTrans.reverseFlag = transaction.reverseType
+ if(originTrans.person){
+ originTrans.personDtl.reverseFlag = originTrans.reverseFlag
+ originTrans.personDtl.reverseAmount = originTrans.refundAmount
+ }
+ if(originTrans.shop){
+ originTrans.shopDtl.reverseFlag = originTrans.reverseFlag
+ }
transactionMainDao.save(originTrans)
}
@@ -391,6 +399,11 @@
val originTrans = transactionMainDao.findByRefnoForUpdate(originRefno)
?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS
, "被退款流水不存在")
+ if (TradeDict.REVERSE_FLAG_NONE != originTrans.reverseType) {
+ throw TransactionProcessException(TradeErrorCode.TRANSDTL_STATUS_ERROR,
+ "原始流水为撤销或退款流水,不能再被退款")
+ }
+
if (originTrans.status != TradeDict.DTL_STATUS_SUCCESS) {
throw TransactionProcessException(TradeErrorCode.TRANSDTL_STATUS_ERROR,
"原流水不是成功状态")
@@ -401,8 +414,13 @@
}
doReversePrepareAndCheck(originTrans, builder, refundAmount)
- // 判断退款金额
- builder.preCheck()
+ //fixme: 判断退款金额 check 不支持部分退款
+ if (originTrans.person) {
+ if (!MoneyUtil.moneyEqual(Math.abs(originTrans.personDtl.amount), refundAmount)) {
+ throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR
+ , "暂不支持部分退款")
+ }
+ }
val transaction = doReverseProcess(originTrans, builder)
originTrans.reverseFlag = TradeDict.REVERSE_FLAG_WIP
@@ -415,6 +433,11 @@
val originTrans = transactionMainDao.findByRefnoForUpdate(originRefno)
?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS
, "被冲正流水不存在")
+ if (TradeDict.REVERSE_FLAG_NONE != originTrans.reverseType) {
+ throw TransactionProcessException(TradeErrorCode.TRANSDTL_STATUS_ERROR,
+ "原始流水为撤销或退款流水,不能再被撤销")
+ }
+
if (originTrans.status != TradeDict.DTL_STATUS_SUCCESS) {
throw TransactionProcessException(TradeErrorCode.TRANSDTL_STATUS_ERROR,
"原流水不是成功状态")
@@ -450,24 +473,32 @@
}
private fun doReverseProcess(originTrans: TTransactionMain, builder: TransactionBuilder): TTransactionMain {
-
+ val summarySuffix = getReverseSuffix(builder.reverseType)
if (originTrans.person) {
builder.person().apply {
setAmount(-originTrans.personDtl.amount, getOppositeTradeFlag(originTrans.personDtl.tradeflag))
setOpposite(originTrans.personDtl.oppositeAccNo, originTrans.personDtl.oppositeAccName)
}
+ builder.description = "${originTrans.personDtl.transdesc}$summarySuffix"
+ builder.payinfo = originTrans.personDtl.payinfo
}
if (originTrans.shop) {
builder.shop().apply {
setAmount(-originTrans.shopDtl.amount, getOppositeTradeFlag(originTrans.shopDtl.tradeflag))
setOpposite(originTrans.shopDtl.oppositeAccNo, originTrans.shopDtl.oppositeAccName)
}
+ builder.description = "${originTrans.shopDtl.transdesc}$summarySuffix"
+ builder.payinfo = originTrans.shopDtl.payInfo
}
- val summarySuffix = getReverseSuffix(builder.reverseType)
+
originTrans.details.forEach {
builder.addDebitCreditRecord(it.draccno, it.drsubjno, it.craccno, it.crsubjno,
-it.amount, "${it.summary}$summarySuffix")
}
+ builder.dtltype = originTrans.dtltype
+ if(builder.operId.isNullOrEmpty()){
+ builder.operator(originTrans.operid, originTrans.opertype)
+ }
return builderRecords(builder, TradeDict.DTL_STATUS_INIT)
}
diff --git a/payapi/src/main/resources/application.properties b/payapi/src/main/resources/application.properties
index 9f662ab..eb46e66 100644
--- a/payapi/src/main/resources/application.properties
+++ b/payapi/src/main/resources/application.properties
@@ -32,7 +32,7 @@
## quartz task scheduler
shopbalance.updater.cron=10/* * * * * ?
dayend.settletask.cron=0 3/30 2-3 * * ?
-query.third.transdtl.result.cron=7 0/3 * * * ?
+query.third.transdtl.result.cron=7 0/1 * * * ?
download.ynrcc.chkfile.cron =3 0/10 1 * * ?
#dayend.settletask.cron = 0 0/2 * * * ?
################################################
diff --git a/payapi/src/main/resources/data.sql b/payapi/src/main/resources/data.sql
index 112b98b..c177115 100644
--- a/payapi/src/main/resources/data.sql
+++ b/payapi/src/main/resources/data.sql
@@ -524,7 +524,7 @@
VALUES ('DAYENDSETTLETASK', '日终结算', '0', '20190619100600', '{tenantid}');
INSERT INTO "tb_shop" ("shopid", "shopname", "shoptype", "fshopid", "status", "opendate", "tenantid")
-VALUES (1, '支付中心', 0, 0, 'normal', '20190517', '{tenantid}');
+VALUES (1, '支付中心', 'root', 0, 'normal', '20190517', '{tenantid}');
INSERT INTO "tb_transcode" ("transcode", "transname", "tenantid")
VALUES (3010, '市民卡代扣', '{tenantid}');
@@ -534,9 +534,9 @@
VALUES (3500, '账户充值', '{tenantid}');
INSERT INTO "tb_dictionary" ("id", "dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
-VALUES (1, 'cancel', 'reverseFlagList', '冲正', '冲正状态', '{tenantid}');
+VALUES (1, 'cancel', 'reverseFlagList', '被撤销', '冲正状态', '{tenantid}');
INSERT INTO "tb_dictionary" ("id", "dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
-VALUES (2, 'reverse', 'reverseFlagList', '手工撤销', '冲正状态', '{tenantid}');
+VALUES (2, 'refund', 'reverseFlagList', '被退款', '冲正状态', '{tenantid}');
INSERT INTO "tb_dictionary" ("id", "dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
VALUES (3, 'none', 'reverseFlagList', '-', '冲正状态', '{tenantid}');
INSERT INTO "tb_dictionary" ("id", "dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
diff --git a/payapi/src/main/resources/templates/system/dtl/userdtl.html b/payapi/src/main/resources/templates/system/dtl/userdtl.html
index 85c7665..6dda89c 100644
--- a/payapi/src/main/resources/templates/system/dtl/userdtl.html
+++ b/payapi/src/main/resources/templates/system/dtl/userdtl.html
@@ -35,7 +35,7 @@
<div class="layui-inline">
<label class="layui-form-label">支付方式</label>
<div class="layui-input-block" style="height: 38px;">
- <select name="sourceType" id="userdtl-search-sourceType" class="layui-select">
+ <select name="sourcetype" id="userdtl-search-sourceType" class="layui-select">
<option value=""> 全部</option>
<option th:each="pt:${paytypelist}" th:value="${pt.sourceType}"
th:text="${pt.paydesc}"></option>
@@ -63,7 +63,7 @@
<div class="layui-inline">
<label class="layui-form-label">状态</label>
<div class="layui-input-block" style="height:38px;">
- <select name="transStatus" id="userdtl-search-transStatus" class="layui-select">
+ <select name="status" id="userdtl-search-transStatus" class="layui-select">
<option value=""> 全部</option>
<option th:each="st:${dtlStatusList}" th:value="${st.dictval}"
th:text="${st.dictcaption}"></option>
@@ -148,10 +148,10 @@
endTransdate: $("#userdtl-search-endTransdate").val(),
personname: $("#userdtl-search-personname").val(),
cardno: $("#userdtl-search-cardno").val(),
- sourceType: $("#userdtl-search-sourceType").val(),
+ sourcetype: $("#userdtl-search-sourceType").val(),
tradeflag: $("#userdtl-search-tradeflag").val(),
transcode: $("#userdtl-search-transcode").val(),
- transStatus: $("#userdtl-search-transStatus").val()
+ status: $("#userdtl-search-transStatus").val()
}, page: {curr: 1}
});
});
@@ -164,10 +164,10 @@
"endTransdate": "",
"personname": "",
"cardno": "",
- "sourceType": "",
+ "sourcetype": "",
"tradeflag": "",
"transcode": "",
- "transStatus": ""
+ "status": ""
});
form.render("select");
});
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java
index 5053954..56e4d60 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/controller/YnrccApiController.java
@@ -22,7 +22,6 @@
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import javax.servlet.http.HttpServletResponse;
-import javax.validation.constraints.NotNull;
import javax.ws.rs.FormParam;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
diff --git a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java
index 52c3228..069bf8f 100644
--- a/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java
+++ b/ynrcc-agent/src/main/java/com/supwisdom/agent/api/service/impl/YnrccParamCheckServiceImpl.java
@@ -115,7 +115,7 @@
}
}
- return true;
+ return false;
}
@Override