From: Tang Cheng Date: Thu, 26 Mar 2020 03:17:39 +0000 (+0800) Subject: 优化代码 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=867c27b05f2196863f35302be4eddcc815f1f30b;p=epayment%2Ffood_payapi.git 优化代码 --- diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/SubAccountDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/SubAccountDao.java new file mode 100644 index 00000000..ac193aba --- /dev/null +++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/SubAccountDao.java @@ -0,0 +1,24 @@ +package com.supwisdom.dlpay.api.dao; + +import com.supwisdom.dlpay.api.domain.TSubAccount; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Lock; +import org.springframework.data.jpa.repository.QueryHints; + +import javax.persistence.LockModeType; +import javax.persistence.QueryHint; +import java.util.List; + +public interface SubAccountDao extends JpaRepository { + List findAllByUserid(String userid); + + TSubAccount readTSubAccountByUseridAndAccountName(String userid, String name); + + @Lock(LockModeType.PESSIMISTIC_WRITE) + @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value = "0")}) + TSubAccount readLockTSubAccountByUseridAndAccountName(String userid, String name); + + @Lock(LockModeType.OPTIMISTIC) + @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value = "0")}) + TSubAccount readLockTSubAccountById(String id); +} diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/SubAccountMetadataDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/SubAccountMetadataDao.java new file mode 100644 index 00000000..0e848457 --- /dev/null +++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/SubAccountMetadataDao.java @@ -0,0 +1,9 @@ +package com.supwisdom.dlpay.api.dao; + +import com.supwisdom.dlpay.api.domain.TSubAccountMetadata; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface SubAccountMetadataDao extends JpaRepository { + TSubAccountMetadata readByNameAndTenantid(String name, String tenantid); + +} diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java index 1c7f5d1f..b77332f8 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java @@ -28,9 +28,6 @@ public class TPersondtl { @Column(name = "ACCNO", length = 32) private String accountNo; - @Column(name = "accname", length = 32) - private String accountName; // 账户名 - @Column(name = "USERNAME", length = 200) private String userName; @@ -325,11 +322,4 @@ public class TPersondtl { this.aftbal = aftbal; } - public String getAccountName() { - return accountName; - } - - public void setAccountName(String accountName) { - this.accountName = accountName; - } } diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSubAccount.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSubAccount.java index b1878e35..6c048b91 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSubAccount.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSubAccount.java @@ -141,4 +141,12 @@ public class TSubAccount { public void setTenantid(String tenantid) { this.tenantid = tenantid; } + + public String getSubjno() { + return subjno; + } + + public void setSubjno(String subjno) { + this.subjno = subjno; + } } diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSubAccountMetadata.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSubAccountMetadata.java index bb3e9d4f..75229ea1 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSubAccountMetadata.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSubAccountMetadata.java @@ -23,6 +23,9 @@ public class TSubAccountMetadata implements Serializable { @Column(name = "title", length = 100) private String title; + @Column(name = "subjno", length = 16) + private String subjno; + @Column(name = "description", length = 200) private String description; @@ -69,4 +72,12 @@ public class TSubAccountMetadata implements Serializable { public void setTenantid(String tenantid) { this.tenantid = tenantid; } + + public String getSubjno() { + return subjno; + } + + public void setSubjno(String subjno) { + this.subjno = subjno; + } } diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java index f81af484..7a80390b 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java @@ -2,7 +2,6 @@ package com.supwisdom.dlpay.api.domain; import com.supwisdom.dlpay.framework.util.Subject; import com.supwisdom.dlpay.framework.util.TradeDict; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import javax.persistence.*; import javax.validation.constraints.Digits; diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt index 20611448..82ae2cc6 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt @@ -111,6 +111,7 @@ class TransactionServiceImpl : TransactionService { this.reverseFlag = TradeDict.REVERSE_FLAG_NONE remark = builder.person().remark tenantid = transaction.tenantid + this.accountName = "main" this.dtltype = builder.dtltype this.status = status this.anonymous = builder.person().isAnonymous() diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt index 85ed71a0..80682b9e 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt @@ -1,6 +1,7 @@ package com.supwisdom.dlpay.api import com.supwisdom.dlpay.api.domain.TAccount +import com.supwisdom.dlpay.api.domain.TSubAccount import com.supwisdom.dlpay.api.domain.TTransactionMain import com.supwisdom.dlpay.api.service.TransactionServiceProxy import com.supwisdom.dlpay.exception.TransactionCheckException @@ -9,6 +10,7 @@ import com.supwisdom.dlpay.framework.domain.TSubject import com.supwisdom.dlpay.framework.util.TradeDict import com.supwisdom.dlpay.framework.util.TradeErrorCode import org.apache.commons.lang3.StringUtils +import java.time.temporal.TemporalAmount import kotlin.math.abs open class SubTransactionBuilder>(val parent: TransactionBuilder) { @@ -84,11 +86,28 @@ open class SubTransactionBuilder>(val parent: Trans } +data class PersonSubAccountTrans(val userid: String, val subAccName: String, + val amount: Double) + class PersonTranactionBuilder(parent: TransactionBuilder, val person: TAccount?) : SubTransactionBuilder(parent) { + private val subAccountList = mutableListOf() fun isAnonymous(): Boolean { return person == null } + + fun addSubAccount(subAccName: String, amount: Double): PersonTranactionBuilder { + if (isAnonymous()) { + throw TransactionCheckException(10001, "匿名用户不支持专款") + } + subAccountList.forEach { + if (it.subAccName == subAccName) { + throw TransactionCheckException(10001, "专款账户<$subAccName>已经消费") + } + } + subAccountList.add(PersonSubAccountTrans(person!!.userid, subAccName, amount)) + return this + } } class ShopTransactionBuilder(parent: TransactionBuilder, val shopacc: TShopacc) @@ -105,6 +124,7 @@ class AccountProxy(private val accountObj: T) { is TAccount -> (accountObj as TAccount).accno is TShopacc -> (accountObj as TShopacc).shopaccno is TSubject -> (accountObj as TSubject).subjno + is TSubAccount -> (accountObj as TSubAccount).subjno else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "不支持的账户类型, $accountObj") } @@ -115,6 +135,7 @@ class AccountProxy(private val accountObj: T) { is TAccount -> (accountObj as TAccount).subjno is TShopacc -> (accountObj as TShopacc).subjno is TSubject -> (accountObj as TSubject).subjno + is TSubAccount -> (accountObj as TSubAccount).subjno else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "不支持的账户类型, $accountObj") } @@ -125,6 +146,7 @@ class AccountProxy(private val accountObj: T) { is TAccount -> (accountObj as TAccount).accname is TShopacc -> (accountObj as TShopacc).shopname is TSubject -> (accountObj as TSubject).subjname + is TSubAccount -> (accountObj as TSubAccount).accountName else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "不支持的账户类型, $accountObj") } @@ -374,10 +396,6 @@ class TransactionBuilder { throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "个人交易对方账户未设置") } -// if (it.payinfo.isEmpty()) { -// throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, -// "个人交易信息未设置") -// } } }