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.TransactionCheckException
import com.supwisdom.dlpay.framework.domain.TShopacc
import com.supwisdom.dlpay.framework.domain.TSubject
import com.supwisdom.dlpay.framework.domain.TTranstype
+import com.supwisdom.dlpay.framework.util.TradeErrorCode
-class AccountHolder<out T> private constructor(val accountId: String, val idType: Int) {
+class AccountHolder<T> private constructor(val accountId: String, val idType: Int) {
companion object {
- const val IDTYPE_ACCOUNT = 1
+ const val IDTYPE_PERSON = 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)
+ return AccountHolder<TAccount>(userid, IDTYPE_PERSON)
}
fun shop(shopid: String): AccountHolder<TShopacc> {
}
}
- internal lateinit var build: PersonTransBuilder
-
- fun get(): T {
- TODO("add rule")
+ private lateinit var builder: PersonTransBuilder
+
+ @Suppress("UNCHECKED_CAST", "IMPLICIT_CAST_TO_ANY")
+ fun <T> get(): T {
+ return when (idType) {
+ IDTYPE_PERSON -> builder.accountUtil.readAccount(accountId)
+ IDTYPE_SHOP -> builder.accountUtil.readShopAcc(accountId)
+ IDTYPE_SUBJECT -> builder.accountUtil.readSubject(accountId)
+ IDTYPE_TRANSTYPE -> builder.accountUtil.readTranstype(accountId.toInt())
+ else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "账户类型未知type<$idType>")
+ } as T
}
fun withLock(nowait: Boolean): T {
fun newBuilder(accUitl: AccountUtilServcie) = PersonTransBuilder(accUitl)
}
- inner class TransDetail(val debitAccNo: String, val creditAccNo: String,
+ inner class TransDetail(val debitAccNo: String, val debitSubjNo: String,
+ val creditAccNo: String, val creditSubjNo: String,
val amount: Double, val summary: String,
val rowno: Int)
private fun preCheckAccount() {
}
- 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 {
+ var debitAccNo = ""
+ var debitSubjNo = ""
+ when (debit.idType) {
+ AccountHolder.IDTYPE_PERSON -> debit.get<TAccount>().also {
+ debitAccNo = it.accno
+ debitSubjNo = it.subjno
+ }
+ AccountHolder.IDTYPE_SHOP -> debit.get<TShopacc>().also {
+ debitAccNo = it.shopaccno
+ debitSubjNo = it.subjno
+ }
+ AccountHolder.IDTYPE_SUBJECT -> debit.get<TSubject>().also {
+ debitAccNo = it.subjno
+ debitSubjNo = it.subjno
+ }
+ AccountHolder.IDTYPE_TRANSTYPE -> TODO("not implements")
+ }
+
+
+ var creditAccNo = ""
+ var creditSubjNo = ""
+ when (credit.idType) {
+ AccountHolder.IDTYPE_PERSON -> credit.get<TAccount>().also {
+ creditAccNo = it.accno
+ creditSubjNo = it.subjno
+ }
+ AccountHolder.IDTYPE_SHOP -> credit.get<TShopacc>().also {
+ creditAccNo = it.shopaccno
+ creditSubjNo = it.subjno
+ }
+ AccountHolder.IDTYPE_SUBJECT -> credit.get<TSubject>().also {
+ creditAccNo = it.subjno
+ creditSubjNo = it.subjno
+ }
+ AccountHolder.IDTYPE_TRANSTYPE -> TODO("not implements")
+ }
+
+ this.details.add(TransDetail(debitAccNo, debitSubjNo, creditAccNo, creditSubjNo,
+ amount, summary, this.details.size + 1))
return this
}
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.domain.TSubject
+import com.supwisdom.dlpay.framework.domain.TTranstype
import com.supwisdom.dlpay.framework.util.TradeErrorCode
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
override fun readShopAcc(shopId: String): TShopacc {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
+
+ override fun readSubjectForUpdate(subjno: String, nowait: Boolean): TSubject {
+ TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+ }
+
+ override fun readSubject(subjno: String): TSubject {
+ TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+ }
+
+ override fun readTranstype(transtype: Int): TTranstype {
+ TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+ }
}
@Service