From: Tang Cheng Date: Mon, 24 Jun 2019 09:25:53 +0000 (+0800) Subject: chore: 测试了撤销和退款业务流程 X-Git-Tag: 1.0.0^2~151 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=6c0b993b9480cf16a85f8bd18b86a5c91fb7f36b;p=epayment%2Ffood_payapi.git chore: 测试了撤销和退款业务流程 --- diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java b/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java index 9b145e07..bf9ac189 100644 --- a/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java +++ b/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java @@ -311,32 +311,24 @@ public class TTransactionMain { creditSum += dtl.getAmount(); } } - int balanceFlag = 2; - if (Subject.SUBJNO_MACHANT_INCOME.equals(subjno)) { - balanceFlag = 2; - } else if (Subject.SUBJNO_PERSONAL_DEPOSIT.equals(subjno)) { - balanceFlag = 2; - } else if (subjno.startsWith("1")) { - balanceFlag = 1; - } - if ("debit".equals(debitOrCredit)) { - if (balanceFlag == 2) { + if (Subject.SUBJNO_MACHANT_INCOME.equals(subjno) + || Subject.SUBJNO_PERSONAL_DEPOSIT.equals(subjno)) { + if ("debit".equals(debitOrCredit)) { return -debitSum; + } else if ("credit".equals(debitOrCredit)) { + return creditSum; } else { - return debitSum; + return debitSum - creditSum; } - } else if ("credit".equals(debitOrCredit)) { - if (balanceFlag == 1) { + } else if (subjno.startsWith("1")) { + if ("debit".equals(debitOrCredit)) { + return debitSum; + } else if ("credit".equals(debitOrCredit)) { return -creditSum; } else { - return creditSum; - } - } else { - if (balanceFlag == 2) { - return -(debitSum - creditSum); - } else { - return debitSum - creditSum; + return creditSum - debitSum; } } + return 0.0; } } diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt index 3c749afd..da8c9861 100644 --- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt +++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt @@ -88,7 +88,7 @@ class ChargeAPIController { description = "账户充值" }.person(account).apply { setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_IN) - this.opposite = AccountProxy(rechargeDrsubjno) + setOpposite(AccountProxy(rechargeDrsubjno)) }.and().addDebitCreditRecord(AccountProxy(rechargeDrsubjno), AccountProxy(account), param.amount / 100.0, "账户充值") .also { builder -> diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt index 4530820d..9e0ebd57 100644 --- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt +++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt @@ -4,13 +4,11 @@ import com.supwisdom.dlpay.api.AccountProxy import com.supwisdom.dlpay.api.CallService import com.supwisdom.dlpay.api.TransactionBuilder import com.supwisdom.dlpay.api.bean.* -import com.supwisdom.dlpay.api.dao.TransactionMainDao import com.supwisdom.dlpay.api.service.AccountUtilServcie import com.supwisdom.dlpay.api.service.ConsumePayService import com.supwisdom.dlpay.api.service.TransactionServiceProxy import com.supwisdom.dlpay.api.service.UserService import com.supwisdom.dlpay.framework.ResponseBodyBuilder -import com.supwisdom.dlpay.framework.service.CommonService import com.supwisdom.dlpay.framework.service.SystemUtilService import com.supwisdom.dlpay.framework.util.Subject import com.supwisdom.dlpay.framework.util.TradeCode @@ -81,10 +79,10 @@ class ConsumeAPIController { description = "账户余额消费" }.person(account).apply { setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_OUT) - opposite = AccountProxy(shopacc) + setOpposite(AccountProxy(shopacc)) }.and().shop(shopacc).apply { setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_IN) - opposite = AccountProxy(account) + setOpposite(AccountProxy(account)) }.and().addDebitCreditRecord(AccountProxy(account), AccountProxy(shopacc), param.amount / 100.0, "账户余额消费") .also { @@ -153,10 +151,10 @@ class ConsumeAPIController { description = "市民卡代扣消费" }.person(account).apply { setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_OUT) - opposite = AccountProxy(shopacc) + setOpposite(AccountProxy(shopacc)) }.and().shop(shopacc).apply { setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_IN) - opposite = AccountProxy(account) + setOpposite(AccountProxy(account)) }.and().addDebitCreditRecord(AccountProxy(subject), AccountProxy(account), param.amount / 100.0, "市民卡代扣消费") .addDebitCreditRecord(AccountProxy(account), AccountProxy(shopacc), @@ -250,6 +248,7 @@ class ConsumeAPIController { } transactionService.success(cancelTrans.refno) return ResponseEntity.ok(ResponseBodyBuilder.create() + .data("refno", cancelTrans.refno) .success("交易确认成功")) } ?: return ResponseEntity.ok(ResponseBodyBuilder.create() .fail(TradeErrorCode.TRANSACTION_NOT_EXISTS, "流水不存在")) @@ -275,6 +274,7 @@ class ConsumeAPIController { } transactionService.success(refundTrans.refno) return ResponseEntity.ok(ResponseBodyBuilder.create() + .data("refno", refundTrans.refno) .success("交易确认成功")) } ?: return ResponseEntity.ok(ResponseBodyBuilder.create() .fail(TradeErrorCode.TRANSACTION_NOT_EXISTS, "流水不存在")) diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt index 1f9f468f..ad6b7409 100644 --- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt +++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt @@ -50,6 +50,18 @@ class TransactionServiceImpl : TransactionService { builder.preCheck() } + private fun getDebitOrCredit(tradeFlag: String, reverseTrans: Boolean): String { + return when (tradeFlag) { + TradeDict.TRADE_FLAG_IN -> if (!reverseTrans) "credit" else "debit" + TradeDict.TRADE_FLAG_OUT -> if (!reverseTrans) "debit" else "credit" + else -> "both" + } + } + + private fun getTransAmountFromDetail(builder: TransactionBuilder, amount: Double): Double { + return amount + } + private fun builderRecords(builder: TransactionBuilder, status: String): TTransactionMain { try { preCheck(builder) @@ -68,7 +80,8 @@ class TransactionServiceImpl : TransactionService { reverseFlag = builder.reverseType checkable = sourceType.checkable transCode = builder.transCode - reverseType = TradeDict.REVERSE_FLAG_NONE + reverseType = builder.reverseType + reverseRefno = builder.reverseRefno refundAmount = 0.0 checkDate = null settleDate = null @@ -86,18 +99,14 @@ class TransactionServiceImpl : TransactionService { transdate = builder.transDate transtime = builder.transTime befbal = builder.person().person.availbal - amount = if (builder.person().tradeFlag == TradeDict.TRADE_FLAG_IN) { - builder.person().amount - } else { - -builder.person().amount - } + amount = builder.person().amount this.sourceType = builder.sourceType payinfo = builder.person().payinfo transcode = builder.transCode tradeflag = builder.person().tradeFlag transdesc = builder.person().description - oppositeAccNo = builder.person().opposite.getAccountNo() - oppositeAccName = builder.person().opposite.getAccountName() + oppositeAccNo = builder.person().oppositeAccNo() + oppositeAccName = builder.person().oppositeSubjNo() this.reverseFlag = TradeDict.REVERSE_FLAG_NONE remark = builder.person().remark this.status = status @@ -118,17 +127,13 @@ class TransactionServiceImpl : TransactionService { this.transtime = builder.transTime this.transcode = builder.transCode this.sourceType = builder.sourceType - amount = if (builder.shop().tradeFlag == TradeDict.TRADE_FLAG_IN) { - builder.shop().amount - } else { - -builder.shop().amount - } + this.amount = builder.shop().amount this.tradeflag = builder.shop().tradeFlag this.shopaccno = builder.shop().shopacc.shopaccno this.shopname = builder.shop().shopacc.shopname this.transdesc = builder.shop().description - this.oppositeAccNo = builder.shop().opposite.getAccountNo() - this.oppositeAccName = builder.shop().opposite.getAccountName() + this.oppositeAccNo = builder.shop().oppositeAccNo() + this.oppositeAccName = builder.shop().oppositeSubjNo() this.remark = builder.shop().remark this.reverseFlag = TradeDict.REVERSE_FLAG_NONE this.updateBala = false @@ -150,8 +155,8 @@ class TransactionServiceImpl : TransactionService { this.tradeCode = builder.transCode this.transDate = builder.transDate this.transTime = builder.transTime - this.oppositeAccNo = builder.subject().opposite.getAccountNo() - this.oppositeAccName = builder.subject().opposite.getAccountName() + this.oppositeAccNo = builder.subject().oppositeAccNo() + this.oppositeAccName = builder.subject().oppositeSubjNo() this.status = status }.also { transaction.subjectDtl = it @@ -163,10 +168,10 @@ class TransactionServiceImpl : TransactionService { TDebitCreditDtl().apply { this.refno = transaction.refno this.seqno = line.seqno - this.draccno = line.debit.getAccountNo() - this.drsubjno = line.debit.getSubjectNo() - this.craccno = line.credit.getAccountNo() - this.crsubjno = line.credit.getSubjectNo() + this.draccno = line.debitAccNo + this.drsubjno = line.debitSubjNo + this.craccno = line.creditAccNo + this.crsubjno = line.creditSubjNo this.amount = line.amount this.summary = line.summary this.settleDate = null @@ -177,11 +182,11 @@ class TransactionServiceImpl : TransactionService { if (builder.hasPerson()) { - val dc = getDebitOrCredit(builder.person().tradeFlag) + val dc = getDebitOrCredit(builder.person().tradeFlag, builder.isReverseTrans()) transaction.sumAmountByAccno(builder.person().person.accno, Subject.SUBJNO_PERSONAL_DEPOSIT, dc).also { - if (transaction.personDtl.amount != it) { + if (transaction.personDtl.amount != getTransAmountFromDetail(builder, it)) { throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "输入金额错误,个人余额不符<${transaction.personDtl.amount}>") } @@ -189,10 +194,10 @@ class TransactionServiceImpl : TransactionService { } if (builder.hasShop()) { - val dc = getDebitOrCredit(builder.shop().tradeFlag) + val dc = getDebitOrCredit(builder.shop().tradeFlag, builder.isReverseTrans()) transaction.sumAmountByAccno(builder.shop().shopacc.shopaccno, Subject.SUBJNO_MACHANT_INCOME, dc).also { - if (transaction.shopDtl.amount != it) { + if (transaction.shopDtl.amount != getTransAmountFromDetail(builder, it)) { throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "输入金额错误,商户余额不符<${transaction.shopDtl.amount}>") } @@ -202,7 +207,12 @@ class TransactionServiceImpl : TransactionService { if (builder.hasSubject()) { transaction.sumAmountByAccno(builder.subject().subject.subjno, builder.subject().subject.subjno, "both").also { - if (transaction.subjectDtl.amount != it) { + val amount = if (builder.reverseType != TradeDict.REVERSE_FLAG_NONE) { + -it + } else { + it + } + if (transaction.subjectDtl.amount != amount) { throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "输入金额错误,科目余额不符<${transaction.subjectDtl.amount}>") } @@ -217,13 +227,6 @@ class TransactionServiceImpl : TransactionService { } } - private fun getDebitOrCredit(tradeFlag: String): String { - return when (tradeFlag) { - TradeDict.TRADE_FLAG_IN -> "credit" - TradeDict.TRADE_FLAG_OUT -> "debit" - else -> "both" - } - } private fun updateRecordStatus(transaction: TTransactionMain, status: String) { if (transaction.person) { @@ -262,7 +265,7 @@ class TransactionServiceImpl : TransactionService { } ///////////////////////////////////////////////////////////////////// - // 业务接口 +// 业务接口 override fun init(builder: TransactionBuilder): TTransactionMain { return builderRecords(builder, TradeDict.DTL_STATUS_INIT) } @@ -311,7 +314,7 @@ class TransactionServiceImpl : TransactionService { } ////////////////////////////////////////////////////////////////// - // 成功 +// 成功 private fun transactionOnSuccess(transaction: TTransactionMain, remark: String, overdraft: Boolean) { if (transaction.person) { // update account balance @@ -362,9 +365,29 @@ class TransactionServiceImpl : TransactionService { } ////////////////////////////////////////////////////////////////// - // 回退业务接口,包括撤销和退款 - override fun refundInit(originRefno: String, builder: TransactionBuilder): TTransactionMain { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. +// 回退业务接口,包括撤销和退款 + override fun refundInit(originRefno: String, refundAmount: Double, builder: TransactionBuilder): TTransactionMain { + val originTrans = transactionMainDao.findByRefnoForUpdate(originRefno) + ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS + , "被退款流水不存在") + if (originTrans.status != TradeDict.DTL_STATUS_SUCCESS) { + throw TransactionProcessException(TradeErrorCode.TRANSDTL_STATUS_ERROR, + "原流水不是成功状态") + } + if (originTrans.reverseFlag != TradeDict.REVERSE_FLAG_NONE + || originTrans.reverseFlag != TradeDict.REVERSE_FLAG_REFUND) { + throw TransactionProcessException(TradeErrorCode.TRANSDTL_STATUS_ERROR, + "原流水已被退款") + } + + doReversePrepareAndCheck(originTrans, builder) + builder.preCheck() + val transaction = doReverseProcess(originTrans, builder) + + originTrans.reverseFlag = TradeDict.REVERSE_FLAG_REFUND + originTrans.refundAmount = refundAmount + transactionMainDao.save(originTrans) + return transaction } override fun cancelInit(originRefno: String, builder: TransactionBuilder): TTransactionMain { @@ -380,9 +403,7 @@ class TransactionServiceImpl : TransactionService { "原流水已被冲正") } - doReversePreCheck(originTrans, builder) - - builder.preCheck() + doReversePrepareAndCheck(originTrans, builder) val transaction = doReverseProcess(originTrans, builder) originTrans.reverseFlag = TradeDict.REVERSE_FLAG_CANCEL @@ -391,10 +412,19 @@ class TransactionServiceImpl : TransactionService { } private fun getOppositeTradeFlag(flag: String): String { - return if (flag == TradeDict.TRADE_FLAG_IN) { - TradeDict.TRADE_FLAG_OUT - } else { - TradeDict.TRADE_FLAG_IN + return when (flag) { + TradeDict.TRADE_FLAG_IN -> TradeDict.TRADE_FLAG_OUT + TradeDict.TRADE_FLAG_OUT -> TradeDict.TRADE_FLAG_IN + else -> "unknown" + } + } + + private fun getReverseSuffix(t: String): String { + return when (t) { + TradeDict.REVERSE_FLAG_CANCEL -> "撤销" + TradeDict.REVERSE_FLAG_REFUND -> "退款" + TradeDict.REVERSE_FLAG_NONE -> "" + else -> "" } } @@ -403,33 +433,41 @@ class TransactionServiceImpl : TransactionService { if (originTrans.person) { builder.person().apply { setAmount(-originTrans.personDtl.amount, getOppositeTradeFlag(originTrans.personDtl.tradeflag)) - opposite = AccountProxy(builder.shop().shopacc) + setOpposite(AccountProxy(builder.shop().shopacc)) } } if (originTrans.shop) { builder.shop().apply { setAmount(-originTrans.shopDtl.amount, getOppositeTradeFlag(originTrans.shopDtl.tradeflag)) - opposite = AccountProxy(builder.person().person) + setOpposite(AccountProxy(builder.person().person)) } } - TODO("") -// originTrans.details.forEach { -// builder.addDebitCreditRecord() -// } + val summarySuffix = getReverseSuffix(builder.reverseType) + originTrans.details.forEach { + builder.addDebitCreditRecord(it.draccno, it.drsubjno, it.craccno, it.crsubjno, + -it.amount, "${it.summary}$summarySuffix") + } + return builderRecords(builder, TradeDict.DTL_STATUS_INIT) } - private fun doReversePreCheck(originTrans: TTransactionMain, builder: TransactionBuilder) { + private fun doReversePrepareAndCheck(originTrans: TTransactionMain, builder: TransactionBuilder) { if (originTrans.person) { val account = accountDao.findByUserid(originTrans.personDtl.userid) ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "账户不存在") - builder.person(account) + builder.person(account).apply { + setAmount(-originTrans.personDtl.amount, + getOppositeTradeFlag(originTrans.personDtl.tradeflag)) + } } if (originTrans.shop) { val shopacc = shopaccDao.findByShopaccno(originTrans.shopDtl.shopaccno) ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "商户不存在") - builder.shop(shopacc) + builder.shop(shopacc).apply { + setAmount(-originTrans.shopDtl.amount, + getOppositeTradeFlag(originTrans.shopDtl.tradeflag)) + } } if (originTrans.subject) { diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt index 2eb17528..fff1a0e0 100644 --- a/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt +++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt @@ -36,7 +36,7 @@ interface TransactionService { * 退款类业务 */ @Transactional - fun refundInit(originRefno: String, builder: TransactionBuilder): TTransactionMain + fun refundInit(originRefno: String, refundAmount: Double, builder: TransactionBuilder): TTransactionMain /** * 撤销业务 @@ -104,7 +104,11 @@ class TransactionServiceProxy { return trans } - fun refund(originRefno: String, newRefno: String): TTransactionMain { - TODO("not implementation") + fun refund(originRefno: String, refundAmount: Double, builder: TransactionBuilder, confirm: Boolean): TTransactionMain { + val trans = transactionService.refundInit(originRefno, refundAmount, builder) + if (confirm) { + return success(trans.refno) + } + return trans } } \ No newline at end of file diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt b/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt index 45831a55..d47d40e9 100644 --- a/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt +++ b/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt @@ -25,10 +25,29 @@ open class SubTransactionBuilder>(val parent: Trans return if (field.isEmpty()) parent.remark else field } - lateinit var opposite: AccountProxy<*> + private lateinit var oppAccno: String + private lateinit var oppSubjno: String fun hasOpposite(): Boolean { - return this::opposite.isInitialized + return this::oppAccno.isInitialized + } + + fun oppositeAccNo(): String { + return this.oppAccno + } + + fun oppositeSubjNo(): String { + return this.oppSubjno + } + + fun setOpposite(accno: String, subjno: String) { + this.oppAccno = accno + this.oppSubjno = subjno + } + + fun setOpposite(accout: AccountProxy<*>) { + this.oppAccno = accout.getAccountNo() + this.oppSubjno = accout.getSubjectNo() } fun and(): TransactionBuilder { @@ -46,7 +65,7 @@ open class SubTransactionBuilder>(val parent: Trans * amount : 交易金额, 正向交易金额必须 >= 0, 冲正交易金额必须 <= 0 */ fun setAmount(amount: Double, inOut: String): SubTransactionBuilder { - this.amount = amount + this.amount = if (inOut == TradeDict.TRADE_FLAG_IN) Math.abs(amount) else -Math.abs(amount) this.tradeFlag = inOut return this } @@ -109,9 +128,15 @@ class AccountProxy(private val accountObj: T) { } } -data class DebitCreditLine(val debit: AccountProxy<*>, val credit: AccountProxy<*>, - val amount: Double, val summary: String, - val seqno: Int) +class DebitCreditLine(val debitAccNo: String, val debitSubjNo: String, + val creditAccNo: String, val creditSubjNo: String, + val amount: Double, val summary: String, val seqno: Int) { + constructor(debit: AccountProxy<*>, credit: AccountProxy<*>, + amount: Double, summary: String, seqno: Int) + : this(debit.getAccountNo(), debit.getSubjectNo(), + credit.getAccountNo(), credit.getSubjectNo(), + amount, summary, seqno) +} // 在 constructor 中加入 service 接口 class TransactionBuilder { @@ -178,6 +203,9 @@ class TransactionBuilder { var reverseType: String = "none" private set + var reverseRefno: String = "" + private set + // 以下属性可以在子表中不同 var payinfo: String = "" @@ -245,12 +273,21 @@ class TransactionBuilder { return this } + fun addDebitCreditRecord(debitAccNo: String, debitSubjNo: String, + creditAccNo: String, creditSubjNo: String, + amount: Double, summary: String): TransactionBuilder { + debitCreditLines.add(DebitCreditLine(debitAccNo, debitSubjNo, + creditAccNo, creditSubjNo, + amount, summary, debitCreditLines.size + 1)) + return this + } + fun getAllDetails(): List { return debitCreditLines.toList() } - private fun checkAmount(amount: Double): Boolean { - return if (reverseType == TradeDict.REVERSE_FLAG_NONE) { + private fun checkAmount(amount: Double, tradeFlag: String): Boolean { + return if (tradeFlag == TradeDict.TRADE_FLAG_IN) { amount >= 0.0 } else { amount <= 0.0 @@ -298,7 +335,7 @@ class TransactionBuilder { throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "个人交易收支方向错误") } - if (!checkAmount(it.amount)) { + if (!checkAmount(it.amount, it.tradeFlag)) { throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "个人交易金额不正确") } @@ -306,10 +343,10 @@ class TransactionBuilder { throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "个人交易对方账户未设置") } - if (it.payinfo.isEmpty()) { - throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, - "个人交易信息未设置") - } +// if (it.payinfo.isEmpty()) { +// throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, +// "个人交易信息未设置") +// } } } @@ -323,7 +360,7 @@ class TransactionBuilder { throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "商户交易收支方向错误") } - if (!checkAmount(it.amount)) { + if (!checkAmount(it.amount, it.tradeFlag)) { throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "商户交易金额不正确") } @@ -335,27 +372,36 @@ class TransactionBuilder { } } + + fun isReverseTrans(): Boolean { + return this.reverseType != TradeDict.REVERSE_FLAG_NONE + } + fun init(transactionService: TransactionServiceProxy): TTransactionMain { return transactionService.init(this) } fun refund(originRefno: String, amount: Double, transactionService: TransactionServiceProxy): TTransactionMain { this.reverseType = TradeDict.REVERSE_FLAG_REFUND - return transactionService.refund(originRefno, "") + this.reverseRefno = originRefno + return transactionService.refund(originRefno, amount, this, true) } fun refundInit(originRefno: String, amount: Double, transactionService: TransactionServiceProxy): TTransactionMain { this.reverseType = TradeDict.REVERSE_FLAG_REFUND - return transactionService.refund(originRefno, "") + this.reverseRefno = originRefno + return transactionService.refund(originRefno, amount, this, false) } fun cancel(originRefno: String, transactionService: TransactionServiceProxy): TTransactionMain { this.reverseType = TradeDict.REVERSE_FLAG_CANCEL + this.reverseRefno = originRefno return transactionService.cancel(originRefno, this, true) } fun cancelInit(originRefno: String, transactionService: TransactionServiceProxy): TTransactionMain { this.reverseType = TradeDict.REVERSE_FLAG_CANCEL + this.reverseRefno = originRefno return transactionService.cancel(originRefno, this, false) }