From bc4e0ff1f3c24bc1d01eaa4e1ba7eb5020d1287d Mon Sep 17 00:00:00 2001 From: Tang Cheng Date: Wed, 10 Apr 2019 11:06:37 +0800 Subject: [PATCH] =?utf8?q?=E5=AE=9A=E4=B9=89=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../dlpay/exception/TransactionDataError.java | 7 +++ .../dlpay/framework/dao/PaydtlDao.java | 10 ++++ .../dlpay/framework/util/TradeErrorCode.java | 35 ++++++++++++ .../dlpay/consume/comsume_builder.kt | 57 +++++++++++++++++++ .../consume/service/impl/pay_service_impl.kt | 45 +++++++++++++++ .../dlpay/consume/service/pay_service.kt | 31 ++++++++++ 6 files changed, 185 insertions(+) create mode 100644 src/main/java/com/supwisdom/dlpay/exception/TransactionDataError.java create mode 100644 src/main/java/com/supwisdom/dlpay/framework/dao/PaydtlDao.java create mode 100644 src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java create mode 100644 src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt create mode 100644 src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/pay_service_impl.kt create mode 100644 src/main/kotlin/com/supwisdom/dlpay/consume/service/pay_service.kt diff --git a/src/main/java/com/supwisdom/dlpay/exception/TransactionDataError.java b/src/main/java/com/supwisdom/dlpay/exception/TransactionDataError.java new file mode 100644 index 00000000..747f6137 --- /dev/null +++ b/src/main/java/com/supwisdom/dlpay/exception/TransactionDataError.java @@ -0,0 +1,7 @@ +package com.supwisdom.dlpay.exception; + +public class TransactionDataError extends Error { + public TransactionDataError(int errCode, String message) { + super(String.format("E-%d : %s", errCode, message)); + } +} diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/PaydtlDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/PaydtlDao.java new file mode 100644 index 00000000..84affc89 --- /dev/null +++ b/src/main/java/com/supwisdom/dlpay/framework/dao/PaydtlDao.java @@ -0,0 +1,10 @@ +package com.supwisdom.dlpay.framework.dao; + +import com.supwisdom.dlpay.consume.domain.TPaydtl; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface PaydtlDao extends JpaRepository { + +} diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java b/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java new file mode 100644 index 00000000..1cc21195 --- /dev/null +++ b/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java @@ -0,0 +1,35 @@ +package com.supwisdom.dlpay.framework.util; + +public class TradeErrorCode { + + public static final int OK = 0; + + /** + * 10000 开始表示交易数据错误 + */ + public static final int INPUT_DATA_ERROR = 100000; + /** + * 账户余额不足 + */ + public static final int SHORT_BALANCE_ERROR = 100001; + + /** + * 个人账户状态异常 + */ + public static final int PERSON_STATUS_ERROR = 100002; + + /** + * 交易记录不存在 + */ + public static final int TRANSACTION_NOT_EXISTS = 100003; + + /** + * 交易状态已完成 + */ + public static final int TRANSACTION_IS_FINISHED = 100004; + + /** + * 交易已冲正 + */ + public static final int TRANSACTION_HAS_CANCELED = 100005; +} diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt new file mode 100644 index 00000000..517a6d6b --- /dev/null +++ b/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt @@ -0,0 +1,57 @@ +package com.supwisdom.dlpay.consume + +import com.supwisdom.dlpay.consume.domain.TAccount +import com.supwisdom.dlpay.consume.domain.TPaydtl +import com.supwisdom.dlpay.consume.domain.TPerson +import com.supwisdom.dlpay.consume.service.PersonBalancePayService + +class PersonBalancePayBuilder private constructor() { + companion object { + fun newBuilder() = PersonBalancePayBuilder() + } + + lateinit var person: TPerson + lateinit var account: TAccount + + var transDate = "" + var transTime = "" + var description = "" + val details = mutableListOf() + + fun setUserAndAcc(per: TPerson, acc: TAccount) { + this.person = per + this.account = acc + } + + private fun prepareData() { + + } + + private fun preCheckAccount() { + + } + + /** + * 单步交易,一次完成交易记账过程 + * @param service + * @param isFinished - true : 完成交易过程,扣除账户余额; false - 完成检查 + */ + fun done(service: PersonBalancePayService, isFinished: Boolean): TPaydtl { + prepareData() + preCheckAccount() + return service.process(this) + } + + /** + * 两步交易,在 paydtl 基础完成确认过程 + * @param paydtl + * @param status - 完成交易状态,见 TradeDict.DTL_STATUS_FAIL + */ + fun done(paydtl: TPaydtl, status: String, service: PersonBalancePayService): TPaydtl { + TODO("finish") + } + + fun done(refno: String, status: String, service: PersonBalancePayService): TPaydtl { + TODO("add process") + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/pay_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/pay_service_impl.kt new file mode 100644 index 00000000..217ed471 --- /dev/null +++ b/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/pay_service_impl.kt @@ -0,0 +1,45 @@ +package com.supwisdom.dlpay.consume.service.impl + +import com.supwisdom.dlpay.consume.PersonBalancePayBuilder +import com.supwisdom.dlpay.consume.domain.TPaydtl +import com.supwisdom.dlpay.consume.service.PersonBalancePayService +import com.supwisdom.dlpay.exception.TransactionDataError +import com.supwisdom.dlpay.framework.dao.PaydtlDao +import com.supwisdom.dlpay.framework.util.TradeErrorCode +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.stereotype.Service + +@Service +class PersonBalancePayServiceImpl : PersonBalancePayService { + @Autowired + lateinit var paydtlDao: PaydtlDao + + override fun init(builder: PersonBalancePayBuilder): TPaydtl { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun wip(paydtl: TPaydtl, builder: PersonBalancePayBuilder): TPaydtl { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun wip(refno: String, builder: PersonBalancePayBuilder): TPaydtl { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun finish(paydtl: TPaydtl, status: String, builder: PersonBalancePayBuilder): TPaydtl { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } + + override fun finish(refno: String, status: String, builder: PersonBalancePayBuilder): TPaydtl { + paydtlDao.findById(refno).let { + if (it.isPresent) { + return finish(it.get(), status, builder) + } + throw TransactionDataError(TradeErrorCode.TRANSACTION_NOT_EXISTS, "交易参考号<$refno>不存在") + } + } + + override fun process(builder: PersonBalancePayBuilder): TPaydtl { + TODO("not implemented") //To change body of created functions use File | Settings | File Templates. + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/service/pay_service.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/service/pay_service.kt new file mode 100644 index 00000000..2d559ea2 --- /dev/null +++ b/src/main/kotlin/com/supwisdom/dlpay/consume/service/pay_service.kt @@ -0,0 +1,31 @@ +package com.supwisdom.dlpay.consume.service + +import com.supwisdom.dlpay.consume.PersonBalancePayBuilder +import com.supwisdom.dlpay.consume.domain.TPaydtl + +interface PersonBalancePayService { + + /** + * 一步完成交易 + */ + fun process(builder: PersonBalancePayBuilder): TPaydtl + + /** + * 两步交易,交易初始化方法,检查交易参数,记录交易流水 + */ + fun init(builder: PersonBalancePayBuilder): TPaydtl + + /** + * 两步交易,交易过程中判断交易状态,并更新交易状态为 wip + */ + fun wip(paydtl: TPaydtl, builder: PersonBalancePayBuilder): TPaydtl + + fun wip(refno: String, builder: PersonBalancePayBuilder): TPaydtl + + /** + * 两步交易,完成交易过程,包括更新交易状态(成功、失败),更新借贷双方余额 + */ + fun finish(paydtl: TPaydtl, status: String, builder: PersonBalancePayBuilder): TPaydtl + + fun finish(refno: String, status: String, builder: PersonBalancePayBuilder): TPaydtl +} \ No newline at end of file -- 2.17.1