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
