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;
}
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++;
+ }
+
}
--- /dev/null
+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