定义接口
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 0000000..747f613
--- /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 0000000..84affc8
--- /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<TPaydtl, String> {
+
+}
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 0000000..1cc2119
--- /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 0000000..517a6d6
--- /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<PayDtlBuilder.PayDetail>()
+
+ 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 0000000..217ed47
--- /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 0000000..2d559ea
--- /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