优化了卡务业务接口,支持退款
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/PublishCardParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CardBizParam.java
similarity index 92%
rename from payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/PublishCardParam.java
rename to payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CardBizParam.java
index f992df5..dd83c93 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/PublishCardParam.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CardBizParam.java
@@ -9,7 +9,7 @@
import javax.validation.constraints.NotNull;
-public class PublishCardParam extends APIRequestParam {
+public class CardBizParam extends APIRequestParam {
@NotNull(message = "操作员ID不能为空", groups = {InitAction.class, ConfirmAction.class, QueryAction.class})
private String operid;
@@ -23,6 +23,9 @@
private String userid;
+ @NotNull(message = "资金方向不能为空", groups = {InitAction.class})
+ private String inOrOut;
+
@NotNull
private Integer totalAmount;
@@ -150,6 +153,14 @@
this.charge = charge;
}
+ public String getInOrOut() {
+ return inOrOut;
+ }
+
+ public void setInOrOut(String inOrOut) {
+ this.inOrOut = inOrOut;
+ }
+
@Override
public boolean checkParam() throws RequestParamCheckException {
return true;
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/PublishCardResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CardBizResponse.java
similarity index 91%
rename from payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/PublishCardResponse.java
rename to payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CardBizResponse.java
index 77be206..5ee85f0 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/PublishCardResponse.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CardBizResponse.java
@@ -5,7 +5,7 @@
@AllArgsConstructor
@NoArgsConstructor
-public class PublishCardResponse extends ApiResponse {
+public class CardBizResponse extends ApiResponse {
private String refno;
private String accdate;
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
index e023ec7..1b1bcd7 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
@@ -1,9 +1,7 @@
package com.supwisdom.dlpay.paysdk.proxy;
import com.supwisdom.dlpay.api.bean.*;
-import org.reactivestreams.Publisher;
import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -28,14 +26,14 @@
ApiResponse testmsg();
@PostMapping("/api/user/biz_init")
- PublishCardResponse bizInit(@RequestBody PublishCardParam param);
+ CardBizResponse bizInit(@RequestBody CardBizParam param);
@PostMapping("/api/user/biz_confirm")
- PublishCardResponse bizConfirm(@RequestBody PublishCardParam param);
+ CardBizResponse bizConfirm(@RequestBody CardBizParam param);
@PostMapping("/api/user/biz_refund")
- PublishCardResponse bizRefund(@RequestBody PublishCardParam param);
+ CardBizResponse bizRefund(@RequestBody CardBizParam param);
@PostMapping("/api/user/biz_query")
- PublishCardResponse bizQuery(@RequestBody PublishCardParam param);
+ CardBizResponse bizQuery(@RequestBody CardBizParam param);
}
diff --git a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
index 8a0ad65..77a02bc 100644
--- a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
+++ b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
@@ -5,7 +5,6 @@
import com.supwisdom.dlpay.api.util.DateUtil;
import com.supwisdom.dlpay.paysdk.ApiLoginHelper;
import com.supwisdom.dlpay.paysdk.proxy.*;
-import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@@ -17,10 +16,8 @@
import org.springframework.cloud.openfeign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.ribbon.FeignRibbonClientAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
-import org.springframework.http.ResponseEntity;
import org.springframework.test.context.junit4.SpringRunner;
-import java.util.LinkedHashMap;
import java.util.List;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -235,7 +232,7 @@
ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
helper.login(appid, secret);
- PublishCardParam param = new PublishCardParam();
+ CardBizParam param = new CardBizParam();
param.setTransdate(DateUtil.getNow("yyyyMMdd"));
param.setTranstime(DateUtil.getNow("HHmmss"));
param.setOperid("1001");
@@ -248,7 +245,7 @@
param.setCashPledge(0);
param.setUserid("ff8080816dd8f3a6016dd8f5e5d80002");
- PublishCardResponse response = userProxy.bizInit(param);
+ CardBizResponse response = userProxy.bizInit(param);
assertThat("user card biz init " + response.getRetcode() + response.getRetmsg() + response.getException(),
response.getRetcode(), equalTo(0));
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
index ef0018a..90199c8 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
@@ -169,7 +169,7 @@
}
@PostMapping("/biz_init")
- fun userBizInit(@RequestBody @Validated(InitAction::class) request: PublishCardParam): ResponseEntity<Any> {
+ fun userBizInit(@RequestBody @Validated(InitAction::class) request: CardBizParam): ResponseEntity<Any> {
val builder = TransactionBuilder().apply {
setTransInfo(request.transdate, request.transtime, TradeCode.TRANSCODE_CARD_BIZ, "balance")
setOutTransInfo(request.operid, request.operSeqno)
@@ -177,7 +177,7 @@
}
val transDesc = arrayListOf<String>()
transDesc.add(request.summary)
- val result = PublishCardResponse()
+ val result = CardBizResponse()
val user = useService.findAccountByUserid(request.userid, null)
?: return ResponseBodyBuilder.failEntity(result,
@@ -197,39 +197,76 @@
setOpposite(capitalSubj.subjno, capitalSubj.subjname)
}
+
val depositAmount = request.totalAmount - request.cost - request.cashPledge - request.charge
- if (depositAmount < 0) {
+ when (request.inOrOut) {
+ TradeDict.TRADE_FLAG_IN -> {
+ request.totalAmount != 0
+ }
+ TradeDict.TRADE_FLAG_OUT -> {
+ request.totalAmount != 0
+ }
+ else -> false
+ }.takeIf {
+ !it
+ }?.apply {
return ResponseBodyBuilder.failEntity(result,
- TradeErrorCode.INPUT_DATA_ERROR,
- "交易金额错误")
+ TradeErrorCode.INPUT_DATA_ERROR, "资金方案向错误或交易金额有误")
}
if (request.totalAmount != 0) {
- if (depositAmount > 0) {
- builder.addDebitCreditRecord(capitalSubj.subjno, capitalSubj.subjno,
- user.accno, Subject.SUBJNO_PERSONAL_DEPOSIT, request.totalAmount / 100.0, request.summary)
- }
- if (request.cost > 0) {
- val subject = accountUtilServcie.readSubject(Subject.SUBJNO_CARD_COST)
- builder.addDebitCreditRecord(user.accno, Subject.SUBJNO_PERSONAL_DEPOSIT,
- subject.subjno, subject.subjno, request.cost / 100.0,
- request.summary)
- transDesc.add("卡成本费" + "%.2f".format(request.cost / 100.0) + " 元")
-
- }
- if (request.cashPledge > 0) {
- val subject = accountUtilServcie.readSubject(Subject.SUBJNO_FOREGIFT)
- builder.addDebitCreditRecord(user.accno, Subject.SUBJNO_PERSONAL_DEPOSIT,
- subject.subjno, subject.subjno, request.cashPledge / 100.0,
- request.summary)
- transDesc.add("卡押金" + "%.2f".format(request.cashPledge / 100.0) + " 元")
- }
- if (request.charge > 0) {
- val subject = accountUtilServcie.readSubject(Subject.SUBJNO_SERVICEFEE_DEFAULT)
- builder.addDebitCreditRecord(user.accno, Subject.SUBJNO_PERSONAL_DEPOSIT,
- subject.subjno, subject.subjno, request.charge / 100.0,
- request.summary)
- transDesc.add("手续费" + "%.2f".format(request.charge / 100.0) + " 元")
+ if (request.inOrOut == TradeDict.TRADE_FLAG_IN) {
+ if (depositAmount != 0) {
+ builder.addDebitCreditRecord(capitalSubj.subjno, capitalSubj.subjno,
+ user.accno, Subject.SUBJNO_PERSONAL_DEPOSIT, request.totalAmount / 100.0, request.summary)
+ }
+ if (request.cost != 0) {
+ val subject = accountUtilServcie.readSubject(Subject.SUBJNO_CARD_COST)
+ builder.addDebitCreditRecord(user.accno, Subject.SUBJNO_PERSONAL_DEPOSIT,
+ subject.subjno, subject.subjno, request.cost / 100.0,
+ request.summary)
+ transDesc.add("收%s %.2f 元".format(subject.subjname, request.cost / 100.0))
+ }
+ if (request.cashPledge != 0) {
+ val subject = accountUtilServcie.readSubject(Subject.SUBJNO_FOREGIFT)
+ builder.addDebitCreditRecord(user.accno, Subject.SUBJNO_PERSONAL_DEPOSIT,
+ subject.subjno, subject.subjno, request.cashPledge / 100.0,
+ request.summary)
+ transDesc.add("收%s %.2f 元".format(subject.subjname, request.cashPledge / 100.0))
+ }
+ if (request.charge != 0) {
+ val subject = accountUtilServcie.readSubject(Subject.SUBJNO_SERVICEFEE_DEFAULT)
+ builder.addDebitCreditRecord(user.accno, Subject.SUBJNO_PERSONAL_DEPOSIT,
+ subject.subjno, subject.subjno, request.charge / 100.0,
+ request.summary)
+ transDesc.add("收%s %.2f 元".format(request.charge / 100.0))
+ }
+ } else {
+ if (depositAmount != 0) {
+ builder.addDebitCreditRecord(user.accno, Subject.SUBJNO_PERSONAL_DEPOSIT,
+ capitalSubj.subjno, capitalSubj.subjno, request.totalAmount / 100.0, request.summary)
+ }
+ if (request.cost != 0) {
+ val subject = accountUtilServcie.readSubject(Subject.SUBJNO_CARD_COST)
+ builder.addDebitCreditRecord(subject.subjno, subject.subjno,
+ user.accno, Subject.SUBJNO_PERSONAL_DEPOSIT,
+ request.cost / 100.0, request.summary)
+ transDesc.add("退%s %.2f 元".format(subject.subjname, request.cost / 100.0))
+ }
+ if (request.cashPledge != 0) {
+ val subject = accountUtilServcie.readSubject(Subject.SUBJNO_FOREGIFT)
+ builder.addDebitCreditRecord(subject.subjno, subject.subjno,
+ user.accno, Subject.SUBJNO_PERSONAL_DEPOSIT,
+ request.cashPledge / 100.0, request.summary)
+ transDesc.add("退%s %.2f 元".format(subject.subjname, request.cashPledge / 100.0))
+ }
+ if (request.charge != 0) {
+ val subject = accountUtilServcie.readSubject(Subject.SUBJNO_SERVICEFEE_DEFAULT)
+ builder.addDebitCreditRecord(subject.subjno, subject.subjno,
+ user.accno, Subject.SUBJNO_PERSONAL_DEPOSIT,
+ request.charge / 100.0, request.summary)
+ transDesc.add("退%s %.2f 元".format(subject.subjname, request.charge / 100.0))
+ }
}
}
builder.description = transDesc.joinToString(";")
@@ -244,9 +281,9 @@
}
@PostMapping("/biz_confirm")
- fun userBizConfirm(@RequestBody @Validated(ConfirmAction::class) request: PublishCardParam): ResponseEntity<Any> {
+ fun userBizConfirm(@RequestBody @Validated(ConfirmAction::class) request: CardBizParam): ResponseEntity<Any> {
val transaction = transactionService.success(request.refno)
- val response = PublishCardResponse().apply {
+ val response = CardBizResponse().apply {
accdate = transaction.accdate
refno = transaction.refno
description = transaction.personDtl.transdesc
@@ -255,12 +292,12 @@
}
@PostMapping("/biz_refund")
- fun userBizRefund(@RequestBody @Valid request: PublishCardParam): ResponseEntity<Any> {
+ fun userBizRefund(@RequestBody @Valid request: CardBizParam): ResponseEntity<Any> {
return ResponseEntity.ok(ResponseBodyBuilder.create().success())
}
@GetMapping("/biz_query")
- fun userBizQuery(@RequestBody @Valid request: PublishCardParam): ResponseEntity<Any> {
+ fun userBizQuery(@RequestBody @Valid request: CardBizParam): ResponseEntity<Any> {
return ResponseEntity.ok(ResponseBodyBuilder.create().success())
}
}
\ No newline at end of file