优化代码
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 0000000..ac193ab
--- /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<TSubAccount, String> {
+ List<TSubAccount> 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 0000000..0e84845
--- /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, Integer> {
+ 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 1c7f5d1..b77332f 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 @@
@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 @@
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 b1878e3..6c048b9 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 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 bb3e9d4..75229ea 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 @@
@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 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 f81af48..7a80390 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 @@
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 2061144..82ae2cc 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 @@
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 85ed71a..80682b9 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.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<T : SubTransactionBuilder<T>>(val parent: TransactionBuilder) {
@@ -84,11 +86,28 @@
}
+data class PersonSubAccountTrans(val userid: String, val subAccName: String,
+ val amount: Double)
+
class PersonTranactionBuilder(parent: TransactionBuilder, val person: TAccount?)
: SubTransactionBuilder<PersonTranactionBuilder>(parent) {
+ private val subAccountList = mutableListOf<PersonSubAccountTrans>()
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 @@
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 @@
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 @@
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 @@
throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
"个人交易对方账户未设置")
}
-// if (it.payinfo.isEmpty()) {
-// throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
-// "个人交易信息未设置")
-// }
}
}