From: Tang Cheng Date: Fri, 18 Oct 2019 08:06:11 +0000 (+0800) Subject: 优化了卡务业务接口,支持退款 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=35b5a92293423e085ac89ce1171e7321dbf48e99;p=epayment%2Ffood_payapi.git 优化了卡务业务接口,支持退款 --- 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 f992df5f..dd83c938 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 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; 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 92% 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 77be206a..5ee85f0d 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 @@ import lombok.NoArgsConstructor; @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 e023ec70..1b1bcd77 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 @@ 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); } 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 8a0ad657..77a02bcf 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.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)); 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 ef0018a9..90199c8d 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 @@ class UserAPIController { } @PostMapping("/biz_init") - fun userBizInit(@RequestBody @Validated(InitAction::class) request: PublishCardParam): ResponseEntity { + fun userBizInit(@RequestBody @Validated(InitAction::class) request: CardBizParam): ResponseEntity { 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() 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 { + fun userBizConfirm(@RequestBody @Validated(ConfirmAction::class) request: CardBizParam): ResponseEntity { 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 { + fun userBizRefund(@RequestBody @Valid request: CardBizParam): ResponseEntity { return ResponseEntity.ok(ResponseBodyBuilder.create().success()) } @GetMapping("/biz_query") - fun userBizQuery(@RequestBody @Valid request: PublishCardParam): ResponseEntity { + fun userBizQuery(@RequestBody @Valid request: CardBizParam): ResponseEntity { return ResponseEntity.ok(ResponseBodyBuilder.create().success()) } } \ No newline at end of file