优化了卡务业务接口,支持退款
authorTang Cheng <cheng.tang@supwisdom.com>
Fri, 18 Oct 2019 08:06:11 +0000 (16:06 +0800)
committerTang Cheng <cheng.tang@supwisdom.com>
Wed, 4 Dec 2019 01:30:58 +0000 (09:30 +0800)
payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CardBizParam.java [moved from payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/PublishCardParam.java with 92% similarity]
payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CardBizResponse.java [moved from payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/PublishCardResponse.java with 92% similarity]
payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt

@@ -9,7 +9,7 @@ import com.supwisdom.dlpay.api.exception.RequestParamCheckException;
 
 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 @@ public class PublishCardParam extends APIRequestParam {
 
   private String userid;
 
+  @NotNull(message = "资金方向不能为空", groups = {InitAction.class})
+  private String inOrOut;
+
   @NotNull
   private Integer totalAmount;
 
@@ -150,6 +153,14 @@ public class PublishCardParam extends APIRequestParam {
     this.charge = charge;
   }
 
+  public String getInOrOut() {
+    return inOrOut;
+  }
+
+  public void setInOrOut(String inOrOut) {
+    this.inOrOut = inOrOut;
+  }
+
   @Override
   public boolean checkParam() throws RequestParamCheckException {
     return true;
@@ -5,7 +5,7 @@ import lombok.NoArgsConstructor;
 
 @AllArgsConstructor
 @NoArgsConstructor
-public class PublishCardResponse extends ApiResponse {
+public class CardBizResponse extends ApiResponse {
   private String refno;
 
   private String accdate;
index e023ec7..1b1bcd7 100644 (file)
@@ -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 @@ public interface UserProxy {
   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);
 }
index 8a0ad65..77a02bc 100644 (file)
@@ -5,7 +5,6 @@ import com.supwisdom.dlpay.api.bean.*;
 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.EnableFeignClients;
 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 @@ public class CitizenCardPayProxyTest {
     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 @@ public class CitizenCardPayProxyTest {
     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));
index ef0018a..90199c8 100644 (file)
@@ -169,7 +169,7 @@ class UserAPIController {
     }
 
     @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 @@ class UserAPIController {
         }
         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 @@ class UserAPIController {
             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 @@ class UserAPIController {
     }
 
     @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 @@ class UserAPIController {
     }
 
     @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