From: Tang Cheng Date: Thu, 16 May 2019 02:47:45 +0000 (+0800) Subject: 重写一个交易过程 X-Git-Tag: 1.0.0^2~220 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=d49969c4594b3fb0149834faf2b79066f8cd9d94;p=epayment%2Ffood_payapi.git 重写一个交易过程 --- 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 27e71856..45977f74 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 org.springframework.stereotype.Repository; import javax.persistence.LockModeType; import javax.persistence.QueryHint; +import java.math.BigDecimal; import java.util.List; @Repository @@ -38,4 +39,5 @@ public interface ShopaccDao extends JpaRepository { @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 a92690f8..83aaeb02 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 class TShopacc { 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 00000000..2cb6caa9 --- /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