重写一个交易过程
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
index 27e7185..45977f7 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
@@ -11,6 +11,7 @@
import javax.persistence.LockModeType;
import javax.persistence.QueryHint;
+import java.math.BigDecimal;
import java.util.List;
@Repository
@@ -38,4 +39,5 @@
@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("select a from TShopacc a where a.shopid=?1")
TShopacc getShopaccWithLock(Integer shopid);
+
}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TShopacc.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TShopacc.java
index a92690f..83aaeb0 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TShopacc.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TShopacc.java
@@ -1,35 +1,54 @@
package com.supwisdom.dlpay.framework.domain;
+import com.supwisdom.dlpay.framework.util.HmacUtil;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import sun.misc.Cleaner;
+
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.util.Calendar;
@Entity
@Table(name = "TB_SHOPACC")
public class TShopacc {
@Id
- @Column(name="SHOPACCNO", length = 10)
+ @Column(name = "SHOPACCNO", length = 10)
private String shopaccno;
- @Column(name="SHOPID", precision = 9)
+ @Column(name = "SHOPID", precision = 9)
private Integer shopid;
- @Column(name="SHOPNAME", length = 200)
+ @Column(name = "SHOPNAME", length = 200)
private String shopname;
- @Column(name="SUBJNO", length = 10)
+ @Column(name = "SUBJNO", length = 10)
private String subjno;
- @Column(name="STATUS", length = 20)
+ @Column(name = "STATUS", length = 20)
private String status;
- @Column(name="OPENDATE", length = 8)
+ @Column(name = "OPENDATE", length = 8)
private String opendate;
- @Column(name="CLOSEDATE", length = 8)
+ @Column(name = "CLOSEDATE", length = 8)
private String closedate;
+ @Column(name = "BALANCE", length = 15, precision = 2)
+ private Double balance = 0.0;
+
+ @Column(name = "VERSION")
+ private Long version = 1L;
+
+ @Column(name = "LASTUPDATE")
+ private Timestamp lastUpdate = new Timestamp(System.currentTimeMillis());
+
+ @Column(name = "MAC")
+ private String mac;
+
public String getShopaccno() {
return shopaccno;
}
@@ -85,4 +104,27 @@
public void setClosedate(String closedate) {
this.closedate = closedate;
}
+
+ public Double getBalance() {
+ return balance;
+ }
+
+ public Long getVersion() {
+ return this.version;
+ }
+
+ public String getMac() {
+ return mac;
+ }
+
+ public void setMac(String mac) {
+ this.mac = mac;
+ }
+
+ public void incrOrDecrBalance(Double amount) {
+ this.balance += amount;
+ this.lastUpdate = new Timestamp(System.currentTimeMillis());
+ this.version++;
+ }
+
}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt b/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
new file mode 100644
index 0000000..2cb6caa
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
@@ -0,0 +1,121 @@
+package com.supwisdom.dlpay.api
+
+import com.supwisdom.dlpay.api.service.AccountUtilServcie
+import com.supwisdom.dlpay.api.service.PersonBalancePayService
+
+class PersonTranactionBuilder(val parent: TransactionBuilder) {
+ var userid: String = ""
+ var userName: String = ""
+ var payCode: String = ""
+ var amount: Double = 0.0
+ var summary: String = ""
+ var oppositeAccno: String = ""
+ var oppositeName: String = ""
+ var oppositeType: String = ""
+
+ fun and(): TransactionBuilder {
+ return parent
+ }
+}
+
+class ShopTransactionBuilder(val parent: TransactionBuilder) {
+ var shopaccno: String = ""
+ var shopname: String = ""
+ var amount: Double = 0.0
+ var summary: String = ""
+ var oppositeAccno: String = ""
+ var oppositeName: String = ""
+ var oppositeType: String = ""
+
+
+ var payCode: String = ""
+ fun and(): TransactionBuilder {
+ return parent
+ }
+}
+
+class SubjectTransactionBuilder(val parent: TransactionBuilder) {
+ var subjno: String = ""
+ var subjName: String = ""
+ var amount: Double = 0.0
+ var summary: String = ""
+
+ fun and(): TransactionBuilder {
+ return parent
+ }
+}
+
+// 在 constructor 中加入 service 接口
+class TransactionBuilder {
+ private lateinit var personBuilder: PersonTranactionBuilder
+ private lateinit var shopBuilder: ShopTransactionBuilder
+ private lateinit var subjectBuilder: SubjectTransactionBuilder
+
+ var transDate: String = ""
+ var transTime: String = ""
+ var payCode: String = ""
+ var refno: String = ""
+
+ fun person(): PersonTranactionBuilder {
+ return PersonTranactionBuilder(this).also {
+ this.personBuilder = it
+ }
+ }
+
+ fun shop(): ShopTransactionBuilder {
+ return ShopTransactionBuilder(this).also {
+ this.shopBuilder = it
+ }
+ }
+
+ fun subject(): SubjectTransactionBuilder {
+ return SubjectTransactionBuilder(this).also {
+ this.subjectBuilder = it
+ }
+ }
+
+ fun init(transactionService: PersonBalancePayService) {
+
+ }
+}
+
+class TransactionExample {
+ companion object {
+ fun example(accountUtilServcie: AccountUtilServcie,
+ service: PersonBalancePayService,
+ userid: String, shopid: Int, amount: Int, manageFee: Int,
+ transDate: String, transTime: String) {
+
+ val person = accountUtilServcie.readAccount(userid)
+ val shop = accountUtilServcie.readShopAcc(shopid)
+
+ val builder = TransactionBuilder().apply {
+ this.transDate = transDate
+ this.transTime = transTime
+ this.payCode = "3001"
+ }.person().apply {
+ this.userid = userid // 可以再优化,直接用 person 对象
+ this.userName = person.accname
+ this.amount = (amount + manageFee) / 100.0 // 金额考虑减和加
+ this.summary = "POS消费"
+ }.and().shop().apply {
+ this.shopaccno = shop.shopaccno // 可以再优化,直接用 shop 对象
+ this.shopname = shop.shopname
+ this.amount = amount / 100.0 // 金额考虑减和加
+ this.summary = "POS消费"
+ }.and()
+
+ if (manageFee > 0) {
+ builder.subject().apply {
+ val subject = accountUtilServcie.readSubject("2001")
+ this.subjno = subject.subjno
+ this.subjName = subject.subjname
+ this.amount = manageFee / 100.0 // 金额考虑减和加
+ this.summary = "POS消费搭伙费"
+ }
+ }
+ builder.init(service)
+
+ }
+ }
+}
\ No newline at end of file