设计记账模块接口,未实现接口细节
diff --git a/src/main/java/com/supwisdom/dlpay/exception/TransactionCheckError.java b/src/main/java/com/supwisdom/dlpay/exception/TransactionCheckError.java
deleted file mode 100644
index e834318..0000000
--- a/src/main/java/com/supwisdom/dlpay/exception/TransactionCheckError.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.supwisdom.dlpay.exception;
-
-public class TransactionCheckError extends TransactionError {
- public TransactionCheckError(int code, String message) {
- super(code, String.format("C - %d, %s", code, message));
- }
-}
diff --git a/src/main/java/com/supwisdom/dlpay/exception/TransactionCheckException.java b/src/main/java/com/supwisdom/dlpay/exception/TransactionCheckException.java
new file mode 100644
index 0000000..87b9ad1
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/exception/TransactionCheckException.java
@@ -0,0 +1,7 @@
+package com.supwisdom.dlpay.exception;
+
+public class TransactionCheckException extends TransactionException {
+ public TransactionCheckException(int code, String message) {
+ super(code, String.format("C - %d, %s", code, message));
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/exception/TransactionError.java b/src/main/java/com/supwisdom/dlpay/exception/TransactionError.java
deleted file mode 100644
index fb247c5..0000000
--- a/src/main/java/com/supwisdom/dlpay/exception/TransactionError.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.supwisdom.dlpay.exception;
-
-public class TransactionError extends Error {
- private int errCode;
-
- public TransactionError(int code, String message) {
- super(message);
- errCode = code;
- }
-
- public int code() {
- return this.errCode;
- }
-}
diff --git a/src/main/java/com/supwisdom/dlpay/exception/TransactionException.java b/src/main/java/com/supwisdom/dlpay/exception/TransactionException.java
new file mode 100644
index 0000000..e84657e
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/exception/TransactionException.java
@@ -0,0 +1,14 @@
+package com.supwisdom.dlpay.exception;
+
+public class TransactionException extends Exception {
+ private int errCode;
+
+ public TransactionException(int code, String message) {
+ super(message);
+ errCode = code;
+ }
+
+ public int code() {
+ return this.errCode;
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/exception/TransactionProcessError.java b/src/main/java/com/supwisdom/dlpay/exception/TransactionProcessError.java
deleted file mode 100644
index 44b9d80..0000000
--- a/src/main/java/com/supwisdom/dlpay/exception/TransactionProcessError.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.supwisdom.dlpay.exception;
-
-public class TransactionProcessError extends TransactionError {
- public TransactionProcessError(int errCode, String message) {
- super(errCode, String.format("E-%d : %s", errCode, message));
- }
-}
diff --git a/src/main/java/com/supwisdom/dlpay/exception/TransactionProcessException.java b/src/main/java/com/supwisdom/dlpay/exception/TransactionProcessException.java
new file mode 100644
index 0000000..aac9273
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/exception/TransactionProcessException.java
@@ -0,0 +1,7 @@
+package com.supwisdom.dlpay.exception;
+
+public class TransactionProcessException extends TransactionException {
+ public TransactionProcessException(int errCode, String message) {
+ super(errCode, String.format("E-%d : %s", errCode, message));
+ }
+}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
index b5c73a4..cb10e5f 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
@@ -3,35 +3,75 @@
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.AccountUtilServcie
import com.supwisdom.dlpay.consume.service.PersonBalancePayService
-import com.supwisdom.dlpay.exception.TransactionCheckError
-import com.supwisdom.dlpay.exception.TransactionProcessError
-import com.supwisdom.dlpay.framework.util.TradeErrorCode
+import com.supwisdom.dlpay.framework.domain.TShopacc
+import com.supwisdom.dlpay.framework.domain.TSubject
+import com.supwisdom.dlpay.framework.domain.TTranstype
-class PersonTransBuilder private constructor() {
+class AccountHolder<out T> private constructor(val accountId: String, val idType: Int) {
companion object {
- fun newBuilder() = PersonTransBuilder()
+ const val IDTYPE_ACCOUNT = 1
+ const val IDTYPE_SHOP = 2
+ const val IDTYPE_SUBJECT = 3
+ const val IDTYPE_TRANSTYPE = 4
+
+ fun person(userid: String): AccountHolder<TAccount> {
+ return AccountHolder<TAccount>(userid, IDTYPE_ACCOUNT)
+ }
+
+ fun shop(shopid: String): AccountHolder<TShopacc> {
+ return AccountHolder<TShopacc>(shopid, IDTYPE_SHOP)
+ }
+
+ fun subject(subjNo: String): AccountHolder<TSubject> {
+ return AccountHolder(subjNo, IDTYPE_SUBJECT)
+ }
+
+ fun transType(transType: Int): AccountHolder<TTranstype> {
+ return AccountHolder("$transType", IDTYPE_TRANSTYPE)
+ }
}
- inner class TransDetail(val accNo: String, val amount: Double,
- val summary: String, val rowno: Int)
+ internal lateinit var build: PersonTransBuilder
+ fun get(): T {
+ TODO("add rule")
+ }
+
+ fun withLock(nowait: Boolean): T {
+ TODO("not implement")
+ }
+}
+
+class PersonTransBuilder private constructor(accUitl: AccountUtilServcie) {
+ companion object {
+ fun newBuilder(accUitl: AccountUtilServcie) = PersonTransBuilder(accUitl)
+ }
+
+ inner class TransDetail(val debitAccNo: String, val creditAccNo: String,
+ val amount: Double, val summary: String,
+ val rowno: Int)
+
+ // 输入参数,调用接口时指定的参数值
lateinit var person: TPerson
- lateinit var account: TAccount
var transDate = ""
var transTime = ""
- var description = ""
- var amount: Double = 0.0
- val details = mutableListOf<TransDetail>()
/**
* 是否允许透支
*/
var overdraft = false
+ var description = ""
- fun setUserAndAcc(per: TPerson, acc: TAccount) {
+ // 内部参数,不需要调用者处理
+ val details = mutableListOf<TransDetail>()
+ var amount: Double = 0.0
+ lateinit var accountUtil: AccountUtilServcie
+
+
+ fun setUserAndAcc(per: TPerson) {
this.person = per
- this.account = acc
}
fun enableOverdraft(b: Boolean = false): PersonTransBuilder {
@@ -51,16 +91,17 @@
}
private fun preCheckAccount() {
- // 判断个人账户
- if (this.account.subjno == "2001") {
- if(amount > this.account.balance) {
- throw TransactionCheckError(TradeErrorCode.SHORT_BALANCE_ERROR, "个人账户余额不足")
- }
- }
}
- fun addDetail(accNo: String, amount: Double, summary: String): PersonTransBuilder {
- this.details.add(TransDetail(accNo, amount, summary, this.details.size + 1))
+ fun addDetail(debitAccNo: String, creditAccNo: String,
+ amount: Double, summary: String): PersonTransBuilder {
+ this.details.add(TransDetail(debitAccNo, creditAccNo, amount,
+ summary, this.details.size + 1))
+ return this
+ }
+
+ fun <T, U> addDetail(debit: AccountHolder<T>, credit: AccountHolder<U>,
+ amount: Double, summary: String): PersonTransBuilder {
return this
}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/controller/consume_service.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/controller/consume_service.kt
new file mode 100644
index 0000000..01a143a
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/controller/consume_service.kt
@@ -0,0 +1,56 @@
+package com.supwisdom.dlpay.consume.controller
+
+import com.supwisdom.dlpay.consume.AccountHolder
+import com.supwisdom.dlpay.consume.PersonTransBuilder
+import com.supwisdom.dlpay.consume.service.AccountUtilServcie
+import com.supwisdom.dlpay.consume.service.PersonBalancePayService
+import com.supwisdom.dlpay.framework.util.TradeDict
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.http.ResponseEntity
+import org.springframework.web.bind.annotation.GetMapping
+import org.springframework.web.bind.annotation.RestController
+
+@RestController
+class ConsumeController {
+ @Autowired
+ lateinit var accountUtilServcie: AccountUtilServcie
+
+ @Autowired
+ lateinit var personBalancePayService: PersonBalancePayService
+
+ @GetMapping("/account/pay")
+ fun accountPay(userid: String, amount: Int, manageFee: Int): ResponseEntity<Any> {
+ val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
+ .setTransDatetime("20190411", "112311")
+ .enableOverdraft(false)
+ .addDetail(AccountHolder.person(userid),
+ AccountHolder.shop("12323"),
+ amount / 100.0, "")
+ .addDetail(AccountHolder.person(userid), AccountHolder.transType(301),
+ manageFee / 100.0, "")
+ .done(personBalancePayService, true)
+ return ResponseEntity.ok(dtl)
+ }
+
+ @GetMapping("/account/payinit")
+ fun accountPayInit(userid: String, amount: Int, manageFee: Int): ResponseEntity<Any> {
+ val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
+ .setTransDatetime("20190411", "112311")
+ .enableOverdraft(false)
+ .addDetail(AccountHolder.person(userid),
+ AccountHolder.shop("12323"),
+ amount / 100.0, "")
+ .addDetail(AccountHolder.person(userid), AccountHolder.transType(301),
+ manageFee / 100.0, "")
+ .done(personBalancePayService, false)
+
+ return ResponseEntity.ok(dtl)
+ }
+
+ @GetMapping("/account/payfinish")
+ fun accountPayFinish(refno: String): ResponseEntity<Any> {
+ val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
+ .done(refno, TradeDict.DTL_STATUS_SUCCESS, personBalancePayService)
+ return ResponseEntity.ok(dtl)
+ }
+}
\ 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
index eaec229..155f9fd 100644
--- 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
@@ -4,15 +4,38 @@
import com.supwisdom.dlpay.consume.dao.AccountDao
import com.supwisdom.dlpay.consume.domain.TAccount
import com.supwisdom.dlpay.consume.domain.TPaydtl
+import com.supwisdom.dlpay.consume.service.AccountUtilServcie
import com.supwisdom.dlpay.consume.service.PersonBalancePayService
-import com.supwisdom.dlpay.exception.TransactionProcessError
+import com.supwisdom.dlpay.exception.TransactionProcessException
import com.supwisdom.dlpay.framework.dao.PaydtlDao
+import com.supwisdom.dlpay.framework.domain.TShopacc
import com.supwisdom.dlpay.framework.util.TradeErrorCode
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
import javax.persistence.EntityManager
import javax.persistence.PersistenceContext
+
+@Service
+class AccountUtilServcieImpl : AccountUtilServcie {
+
+ override fun readAccountForUpdate(userid: String, nowait: Boolean): TAccount {
+ TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+ }
+
+ override fun readAccount(userid: String): TAccount {
+ TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+ }
+
+ override fun readShopAccForUpdate(shopId: String, nowait: Boolean): TShopacc {
+ TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+ }
+
+ override fun readShopAcc(shopId: String): TShopacc {
+ TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+ }
+}
+
@Service
class PersonBalancePayServiceImpl : PersonBalancePayService {
@Autowired
@@ -22,10 +45,10 @@
lateinit var accountDao: AccountDao
@PersistenceContext
- lateinit var em : EntityManager
+ lateinit var em: EntityManager
private fun lockAccount(builder: PersonTransBuilder): TAccount {
- return accountDao.getByAccnoForUpdate(builder.account.accno)
+ TODO("")
}
override fun process(builder: PersonTransBuilder): TPaydtl {
@@ -53,7 +76,7 @@
if (it.isPresent) {
return finish(it.get(), status, builder)
}
- throw TransactionProcessError(TradeErrorCode.TRANSACTION_NOT_EXISTS, "交易参考号<$refno>不存在")
+ throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS, "交易参考号<$refno>不存在")
}
}
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
index 8d631aa..66d3b37 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/consume/service/pay_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/service/pay_service.kt
@@ -1,7 +1,18 @@
package com.supwisdom.dlpay.consume.service
import com.supwisdom.dlpay.consume.PersonTransBuilder
+import com.supwisdom.dlpay.consume.domain.TAccount
import com.supwisdom.dlpay.consume.domain.TPaydtl
+import com.supwisdom.dlpay.framework.domain.TShopacc
+
+interface AccountUtilServcie {
+
+ fun readAccountForUpdate(userid: String, nowait: Boolean): TAccount
+ fun readAccount(userid: String): TAccount
+
+ fun readShopAccForUpdate(shopId: String, nowait: Boolean): TShopacc
+ fun readShopAcc(shopId: String): TShopacc
+}
interface PersonBalancePayService {