package com.supwisdom.dlpay.api.controller
import com.supwisdom.dlpay.agent.AgentCode
+import com.supwisdom.dlpay.agent.AgentPayService
import com.supwisdom.dlpay.api.*
import com.supwisdom.dlpay.api.bean.*
import com.supwisdom.dlpay.api.service.*
import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
import com.supwisdom.dlpay.agent.service.CitizenCardPayAgent
import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.context.ApplicationContext
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
lateinit var cardService: CardService
@Autowired
lateinit var citizencardPayService: CitizencardPayService
-
@Autowired
- private lateinit var citizenCardPayAgent: CitizenCardPayAgent
+ private lateinit var applicationContext: ApplicationContext
+
@Autowired
lateinit var citizencardQueryResultTask: CitizencardQueryResultTask
.fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<市民卡代扣>"))
}
+ fun createAgentService(sourceType: String): AgentPayService {
+ return applicationContext.getBean(sourceType + "Agent")?.let {
+ it as AgentPayService
+ } ?: throw TransactionCheckException(TradeErrorCode.BUSINESS_DEAL_ERROR,
+ "支付类型<$sourceType>未定义")
+ }
+
/**
* ============================================================================
* 市民卡【交易确认】
@PostMapping("/citizencard/payfinish")
fun citizencardPayinit(@Valid @RequestBody param: CitizenCardPayfinishParam): ResponseEntity<Any> {
val dtl = transactionService.wip(param.refno)
- val resp = citizenCardPayAgent.pay(dtl)
+ val service = createAgentService(TradeDict.PAYTYPE_CITIZEN_CARD)
+ val resp = service.pay(dtl)
when (resp.code) {
AgentCode.SUCCESS ->
transactionService.success(dtl.refno, resp.agentRefno, false).let {
val cancelTrans = builder.cancelInit(mainDtl.refno, transactionService)
transactionService.wip(cancelTrans.refno)
- when {
- TradeDict.PAYTYPE_BALANCE == mainDtl.sourceType -> {
- //余额支付,直接撤销
- transactionService.success(cancelTrans.refno)
+ val service = createAgentService(mainDtl.sourceType)
+ val resp = service.pay(cancelTrans)
+ when (resp.code) {
+ AgentCode.SUCCESS -> {
+ transactionService.success(cancelTrans.refno, resp.agentRefno, false)
return ResponseEntity.ok(ResponseBodyBuilder.create()
.success(PayReverseResponse(cancelTrans.refno), "交易撤销成功"))
-
}
- TradeDict.PAYTYPE_CITIZEN_CARD == mainDtl.sourceType -> {
- val resp = citizenCardPayAgent.pay(cancelTrans)
- when (resp.code) {
- AgentCode.SUCCESS -> {
- transactionService.success(cancelTrans.refno, resp.agentRefno, false)
-
- return ResponseEntity.ok(ResponseBodyBuilder.create()
- .success(PayReverseResponse(cancelTrans.refno), "交易撤销成功"))
- }
- AgentCode.NEED_QUERY -> {
- //待查询
- citizencardQueryResultTask.queryResult(cancelTrans.refno, 0)
- return ResponseEntity.ok(ResponseBodyBuilder.create()
- .fail(PayReverseResponse(cancelTrans.refno),
- TradeErrorCode.WAIT_QUERY_RESULT, "请查询撤销结果"))
- }
- else -> transactionService.fail(cancelTrans.refno,
- "${resp.agentCode}-${resp.agentMsg}").let {
- return ResponseEntity.ok(ResponseBodyBuilder.create()
- .fail(PayReverseResponse(cancelTrans.refno),
- TradeErrorCode.WAIT_QUERY_RESULT, "请查询撤销结果"))
- }
- }
+ AgentCode.NEED_QUERY -> {
+ //待查询
+ citizencardQueryResultTask.queryResult(cancelTrans.refno, 0)
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
+ .fail(PayReverseResponse(cancelTrans.refno),
+ TradeErrorCode.WAIT_QUERY_RESULT, "请查询撤销结果"))
+ }
+ else -> transactionService.fail(cancelTrans.refno,
+ "${resp.agentCode}-${resp.agentMsg}").let {
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
+ .fail(PayReverseResponse(cancelTrans.refno),
+ TradeErrorCode.WAIT_QUERY_RESULT, "请查询撤销结果"))
}
- else -> return ResponseEntity.ok(ResponseBodyBuilder.create()
- .fail(PayReverseResponse(cancelTrans.refno),
- TradeErrorCode.BUSINESS_DEAL_ERROR, "暂不支持支付方式[${mainDtl.sourceType}]的流水撤销"))
}
-
- } ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
- .fail(PayReverseResponse(),
- TradeErrorCode.BUSINESS_DEAL_ERROR, "流水不存在"))
+ } ?: return ResponseEntity.ok(ResponseBodyBuilder.create().fail(PayReverseResponse(),
+ TradeErrorCode.BUSINESS_DEAL_ERROR, "流水不存在"))
}
/**
}
val refundTrans = builder.refundInit(mainDtl.refno, param.refundAmount / 100.0, transactionService)
transactionService.wip(refundTrans.refno)
- when {
- TradeDict.PAYTYPE_BALANCE == mainDtl.sourceType -> {
- //余额支付,直接撤销
- transactionService.success(refundTrans.refno)
+ val service = createAgentService(mainDtl.sourceType)
+ val resp = service.refund(refundTrans)
- return ResponseEntity.ok(ResponseBodyBuilder.create()
- .success(PayReverseResponse(refundTrans.refno), "交易退款成功"))
+ when (resp.code) {
+ AgentCode.SUCCESS -> {
+ transactionService.success(refundTrans.refno, resp.agentRefno, false)
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
+ .success(PayReverseResponse(refundTrans.refno), "交易撤销成功"))
}
- TradeDict.PAYTYPE_CITIZEN_CARD == mainDtl.sourceType -> {
-
- val resp = citizencardPayService.cardPayRefund(refundTrans.refno, refundTrans.accdate, mainDtl.refno, MoneyUtil.YuanToFen(mainDtl.personDtl.amount))
- when {
- YnrccUtil.CODE_SUCCESS == resp.code -> {
- transactionService.success(refundTrans.refno, resp.bankjourno, false)
-
- return ResponseEntity.ok(ResponseBodyBuilder.create()
- .success(PayReverseResponse(refundTrans.refno), "交易退款成功"))
- }
- YnrccUtil.CODE_EXCEPTION == resp.code -> {
- //待查询
- citizencardQueryResultTask.queryResult(refundTrans.refno, 0)
- return ResponseEntity.ok(ResponseBodyBuilder.create()
- .data("refundRefno", refundTrans.refno)
- .fail(TradeErrorCode.WAIT_QUERY_RESULT, "请查询退款结果"))
- }
- else -> transactionService.fail(refundTrans.refno, resp.message).let {
- return ResponseEntity.ok(ResponseBodyBuilder.create()
- .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "交易退款失败-${resp.message}"))
- }
- }
+ AgentCode.NEED_QUERY -> {
+ //待查询
+ citizencardQueryResultTask.queryResult(refundTrans.refno, 0)
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
+ .fail(PayReverseResponse(refundTrans.refno),
+ TradeErrorCode.WAIT_QUERY_RESULT, "请查询撤销结果"))
+ }
+ else -> transactionService.fail(refundTrans.refno,
+ "${resp.agentCode}-${resp.agentMsg}").let {
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
+ .fail(PayReverseResponse(refundTrans.refno),
+ TradeErrorCode.WAIT_QUERY_RESULT, "请查询撤销结果"))
}
- else -> return ResponseEntity.ok(ResponseBodyBuilder.create()
- .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "暂不支持支付方式[${mainDtl.sourceType}]的流水退款"))
}
+
} ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
.fail(TradeErrorCode.TRANSACTION_NOT_EXISTS, "流水不存在"))
}