diff --git a/src/main/java/com/supwisdom/dlpay/consume/dao/AccountDao.java b/src/main/java/com/supwisdom/dlpay/consume/dao/AccountDao.java
index 5cae32d..f102258 100644
--- a/src/main/java/com/supwisdom/dlpay/consume/dao/AccountDao.java
+++ b/src/main/java/com/supwisdom/dlpay/consume/dao/AccountDao.java
@@ -12,7 +12,6 @@
 public interface AccountDao extends JpaRepository<TAccount, String> {
 
   @Lock(LockModeType.PESSIMISTIC_WRITE)
-  @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value ="5000")})
   @Query("select a from TAccount a where a.accno = ?1")
   TAccount getByAccnoForUpdate(String accno);
 
@@ -21,6 +20,14 @@
   @Query("select a from TAccount a where a.accno = ?1")
   TAccount getByAccnoForUpdateNowait(String accno);
 
-
   TAccount findByUserid(String userid);
+
+  @Lock(LockModeType.PESSIMISTIC_WRITE)
+  @Query("select a from TAccount a where a.userid = ?1")
+  TAccount getByUseridForUpdate(String userid);
+
+  @Lock(LockModeType.PESSIMISTIC_WRITE)
+  @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value = "0")})
+  @Query("select a from TAccount a where a.userid = ?1")
+  TAccount getByUseridForUpdateNowait(String userid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/consume/dao/UserdtlDao.java b/src/main/java/com/supwisdom/dlpay/consume/dao/UserdtlDao.java
index e465fbd..67cbeff 100644
--- a/src/main/java/com/supwisdom/dlpay/consume/dao/UserdtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/consume/dao/UserdtlDao.java
@@ -15,7 +15,11 @@
   TUserdtl findByRefno(String refno);
 
   @Lock(LockModeType.PESSIMISTIC_WRITE)
-  @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value ="0")})
   @Query("select dtl from TUserdtl  dtl where dtl.refno = ?1")
   TUserdtl findByRefnoForUpdate(String refno);
+
+  @Lock(LockModeType.PESSIMISTIC_WRITE)
+  @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value ="0")})
+  @Query("select dtl from TUserdtl  dtl where dtl.refno = ?1")
+  TUserdtl findByRefnoForUpdateNowait(String refno);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/PeriodDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/PeriodDao.java
index 8ec82ca..aa05bd7 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/PeriodDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/PeriodDao.java
@@ -15,7 +15,7 @@
   @Query(value = "from TPeriod t where t.periodYear=:periodyear and t.periodMonth=:periodmonth ")
   TPeriod getPeriod(@Param("periodyear") Integer periodyear, @Param("periodmonth") Integer periodmonth);
 
-  @Lock(LockModeType.PESSIMISTIC_FORCE_INCREMENT)
+  @Lock(LockModeType.PESSIMISTIC_WRITE)
   @Query(value = "from TPeriod t where t.periodYear=:periodyear and t.periodMonth=:periodmonth ")
   TPeriod getTPeriodWithLock(@Param("periodyear") Integer periodyear, @Param("periodmonth") Integer periodmonth);
 }
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 1b351b2..27e7185 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
@@ -3,10 +3,12 @@
 import com.supwisdom.dlpay.framework.data.ExistBean;
 import com.supwisdom.dlpay.framework.domain.TShopacc;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Lock;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.jpa.repository.QueryHints;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
+import javax.persistence.LockModeType;
 
 import javax.persistence.QueryHint;
 import java.util.List;
@@ -28,7 +30,12 @@
 
   TShopacc findByShopid(Integer shopid);
 
-  @Query(value = "select s from TShopacc  s where s.shopid = ?1")
+  @Lock(LockModeType.PESSIMISTIC_WRITE)
   @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value ="0")})
-  TShopacc getShopAccForUpdate(Integer shopid);
+  @Query("select a from TShopacc a where a.shopid=?1")
+  TShopacc getShopaccWithLockNowait(Integer shopid);
+
+  @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/dao/ShopaccbalDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccbalDao.java
index 1721e6e..1a769bb 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccbalDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccbalDao.java
@@ -16,7 +16,7 @@
   @Query(value = "select t.* from TB_SHOPACCBAL t left join (select shopaccno from TB_SHOPACCDAY where accdate=:lastsettday ) a on t.shopaccno=a.shopaccno where a.shopaccno is null ", nativeQuery = true)
   List<TShopaccbal> getUnsettleShopacc(@Param("lastsettday") String lastsettday);
 
-  @Lock(LockModeType.PESSIMISTIC_FORCE_INCREMENT)
+  @Lock(LockModeType.PESSIMISTIC_WRITE)
   @Query(value = "from TShopaccbal where shopaccno=:shopaccno ")
   TShopaccbal getTShopaccbalByIdWithLock(@Param("shopaccno")String shopaccno);
 
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectDao.java
index a694eaa..328a01a 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectDao.java
@@ -23,4 +23,6 @@
 
   @Query(value = "select subjname from TSubject where subjno=:subjno ")
   String getSubjectname(@Param("subjno") String subjno);
+
+  TSubject findBySubjno(String subjno);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectbalDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectbalDao.java
index b2638c1..73b01cf 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectbalDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectbalDao.java
@@ -27,7 +27,7 @@
   @Query(value = "select case when :balflag=1 then sum(drbal) else sum(crbal) end as amount from tb_subjectbal where subjno in (select subjno from tb_subject where endflag=1 and balflag=:balflag )",nativeQuery = true)
   Double getSumEndsubjectBalByEndflag(@Param("balflag")Integer balflag);
 
-  @Lock(LockModeType.PESSIMISTIC_FORCE_INCREMENT)
+  @Lock(LockModeType.PESSIMISTIC_WRITE)
   @Query("from TSubjectbal where subjno=:subjno ")
   TSubjectbal getTSubjectbalBySubjnoWithLock(@Param("subjno")String subjno);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/TaskLockDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/TaskLockDao.java
index 9199a6a..6c36c5d 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/TaskLockDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/TaskLockDao.java
@@ -13,7 +13,7 @@
 @Repository
 public interface TaskLockDao extends JpaRepository<TTaskLock, String> {
 
-  @Lock(LockModeType.PESSIMISTIC_FORCE_INCREMENT)
+  @Lock(LockModeType.PESSIMISTIC_WRITE)
   @Query("select a from TTaskLock a where a.taskcode=:taskcode")
   TTaskLock getTaskLockWithLock(@Param("taskcode") String taskcode);
 
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/TranstypeDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/TranstypeDao.java
index 89d1da4..a276c61 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/TranstypeDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/TranstypeDao.java
@@ -2,7 +2,9 @@
 
 import com.supwisdom.dlpay.framework.domain.TTranstype;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
 
+@Repository
 public interface TranstypeDao extends JpaRepository<TTranstype, Integer> {
-
+  TTranstype findByTranstype(Integer transtype);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherDao.java
index 18a4769..cb618f9 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherDao.java
@@ -19,7 +19,7 @@
   @Query(value="delete from TB_VOUCHER where POSTFLAG=0 ",nativeQuery = true)
   void deleteUnpostVoucher();
 
-  @Lock(LockModeType.PESSIMISTIC_FORCE_INCREMENT)
+  @Lock(LockModeType.PESSIMISTIC_WRITE)
   @Query(value = "from TVoucher where postflag=0 order by voucherid ")
   List<TVoucher> getSettleVouchers();
 
@@ -32,7 +32,7 @@
   @Query(value = "select sum(va.dramt) as dramt, sum(va.cramt) as cramt  from TB_VOUCHERENTRY va,TB_VOUCHER vb where va.voucherid=vb.voucherid and vb.voucherdate=:voucherdate and va.subjno=:subjno ", nativeQuery = true)
   MerchBean getSettleSuminfo(@Param("voucherdate") Integer voucherdate, @Param("subjno") String subjno);
 
-  @Lock(LockModeType.PESSIMISTIC_FORCE_INCREMENT)
+  @Lock(LockModeType.PESSIMISTIC_WRITE)
   @Query(value = "from TVoucher where voucherid=:voucherid ")
   TVoucher findByVoucheridWithLock(@Param("voucherid") String voucherid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherEntryDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherEntryDao.java
index 893bd2a..ba4ba73 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherEntryDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherEntryDao.java
@@ -18,7 +18,7 @@
   @Query(value = "from TVoucherEntry where voucherid in (select voucherid from TVoucher where voucherdate=:voucherdate) order by subjno,accno,voucherid ")
   List<TVoucherEntry> getVoucherEntryByVoucherdate(@Param("voucherdate") Integer voucherdate);
 
-  @Lock(LockModeType.PESSIMISTIC_FORCE_INCREMENT)
+  @Lock(LockModeType.PESSIMISTIC_WRITE)
   @Query(value = "from TVoucherEntry t where t.voucherid=:voucherid ")
   List<TVoucherEntry> getVoucherEntryByVoucherid(@Param("voucherid")String voucherid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/VouchernoCtlDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/VouchernoCtlDao.java
index 62d3827..46b4b23 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/VouchernoCtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/VouchernoCtlDao.java
@@ -14,7 +14,7 @@
   @Query(value = "update TB_VOUCHERNOCTL set PERIOD_MONTH=:peridmonth,VOUCHERNO=:voucherno where VOUCHERTYPE=1 ", nativeQuery = true)
   void updateVoucherno(@Param("peridmonth") int peridmonth, @Param("voucherno") int voucherno);
 
-  @Lock(LockModeType.PESSIMISTIC_FORCE_INCREMENT)
+  @Lock(LockModeType.PESSIMISTIC_WRITE)
   @Query(value = "from TVouchernoCtl where vouchertype=1 ")
   TVouchernoCtl getVoucherno();
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TTranstype.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TTranstype.java
index b098ce3..6f0c036 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TTranstype.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TTranstype.java
@@ -10,46 +10,46 @@
 public class TTranstype {
   @Id
   @Column(name = "TRANSTYPE", nullable = false, precision = 4)
-  private Integer TRANSTYPE;
+  private Integer transtype;
 
   @Column(name = "DRSUBJNO", length = 10)
-  private String DRSUBJNO;
+  private String drsubjno;
 
   @Column(name = "CRSUBJNO", length = 10)
-  private String CRSUBJNO;
+  private String crsubjno;
 
   @Column(name = "SUMMARY", length = 200)
-  private String SUMMARY;
+  private String summary;
 
-  public Integer getTRANSTYPE() {
-    return TRANSTYPE;
+  public Integer getTranstype() {
+    return transtype;
   }
 
-  public void setTRANSTYPE(Integer TRANSTYPE) {
-    this.TRANSTYPE = TRANSTYPE;
+  public void setTranstype(Integer transtype) {
+    this.transtype = transtype;
   }
 
-  public String getDRSUBJNO() {
-    return DRSUBJNO;
+  public String getDrsubjno() {
+    return drsubjno;
   }
 
-  public void setDRSUBJNO(String DRSUBJNO) {
-    this.DRSUBJNO = DRSUBJNO;
+  public void setDrsubjno(String drsubjno) {
+    this.drsubjno = drsubjno;
   }
 
-  public String getCRSUBJNO() {
-    return CRSUBJNO;
+  public String getCrsubjno() {
+    return crsubjno;
   }
 
-  public void setCRSUBJNO(String CRSUBJNO) {
-    this.CRSUBJNO = CRSUBJNO;
+  public void setCrsubjno(String crsubjno) {
+    this.crsubjno = crsubjno;
   }
 
-  public String getSUMMARY() {
-    return SUMMARY;
+  public String getSummary() {
+    return summary;
   }
 
-  public void setSUMMARY(String SUMMARY) {
-    this.SUMMARY = SUMMARY;
+  public void setSummary(String summary) {
+    this.summary = summary;
   }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java b/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java
index b57c657..ea02de7 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java
@@ -6,10 +6,7 @@
 import com.supwisdom.dlpay.framework.domain.*;
 import com.supwisdom.dlpay.framework.service.DayendSettleService;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
-import com.supwisdom.dlpay.framework.util.DateUtil;
-import com.supwisdom.dlpay.framework.util.MoneyUtil;
-import com.supwisdom.dlpay.framework.util.StringUtil;
-import com.supwisdom.dlpay.framework.util.TradeDict;
+import com.supwisdom.dlpay.framework.util.*;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -505,7 +502,7 @@
 
     //明细
     for (TVoucherEntry entry : entryList) {
-      if (TradeDict.SUBJNO_SHOP.equals(entry.getSubjno())) {
+      if (Subject.SUBJNO_MACHANT_INCOME.equals(entry.getSubjno())) {
         TShopaccbal tShopaccbal = shopaccbalDao.getTShopaccbalByIdWithLock(entry.getAccno());
         if (null == tShopaccbal) {
           throw new Exception("商户表商户账号[" + entry.getAccno() + "]不存在");
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/APIRequest.java b/src/main/java/com/supwisdom/dlpay/framework/util/APIRequest.java
new file mode 100644
index 0000000..6679181
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/APIRequest.java
@@ -0,0 +1,41 @@
+package com.supwisdom.dlpay.framework.util;
+
+public class APIRequest {
+  private String app_id;
+  private String sign;
+  private String sign_method;
+  private String timestamp;
+
+  public String getApp_id() {
+    return app_id;
+  }
+
+  public void setApp_id(String app_id) {
+    this.app_id = app_id;
+  }
+
+  public String getSign() {
+    return sign;
+  }
+
+  public void setSign(String sign) {
+    this.sign = sign;
+  }
+
+  public String getSign_method() {
+    return sign_method;
+  }
+
+  public void setSign_method(String sign_method) {
+    this.sign_method = sign_method;
+  }
+
+  public String getTimestamp() {
+    return timestamp;
+  }
+
+  public void setTimestamp(String timestamp) {
+    this.timestamp = timestamp;
+  }
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/util/HmacUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/HmacUtil.java
similarity index 97%
rename from src/main/java/com/supwisdom/dlpay/util/HmacUtil.java
rename to src/main/java/com/supwisdom/dlpay/framework/util/HmacUtil.java
index 832c699..0978e28 100644
--- a/src/main/java/com/supwisdom/dlpay/util/HmacUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/HmacUtil.java
@@ -1,6 +1,4 @@
-package com.supwisdom.dlpay.util;
-
-import com.supwisdom.dlpay.framework.util.DateUtil;
+package com.supwisdom.dlpay.framework.util;
 
 import javax.crypto.Mac;
 import javax.crypto.spec.SecretKeySpec;
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java b/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
index 1c4e046..6c97c50 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
@@ -45,7 +45,7 @@
   public static final int SHOP_NOT_EXISTS = 10007;
 
   /**
-   * 商户不存在
+   * 科目不存在
    * */
   public static final int SUBJECT_NOT_EXISTS = 10008;
 
@@ -74,4 +74,14 @@
    * */
   public static final int TRANSDTL_STATUS_NOT_INIT = 10013;
 
+  /**
+   * 账户交易繁忙
+   * */
+  public static final int ACCOUNT_TRADE_BUSY = 10014;
+
+  /**
+   * 非等待锁查询超时异常
+   * */
+  public static final int LOCK_READ_TIMEOUT = 10015;
+
 }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/ThirdPayCall.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/ThirdPayCall.kt
index 52efca0..3defd76 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/consume/ThirdPayCall.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/ThirdPayCall.kt
@@ -8,7 +8,7 @@
 import com.supwisdom.dlpay.consume.bean.SupYktResp
 import com.supwisdom.dlpay.consume.domain.TUserdtl
 import com.supwisdom.dlpay.framework.util.MoneyUtil
-import com.supwisdom.dlpay.util.HmacUtil
+import com.supwisdom.dlpay.framework.util.HmacUtil
 
 /**
  * Created by shuwei on 2019/4/11.
diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
index 9c49367..2d1eeb6 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
@@ -51,7 +51,7 @@
     @Suppress("UNCHECKED_CAST", "IMPLICIT_CAST_TO_ANY")
     fun <T> get(): T {
         return when (idType) {
-            IDTYPE_PERSON -> builder.accountUtil.readAccount(accountId)
+            IDTYPE_PERSON -> builder.accountUtil.readAccountForUpdateNowait(accountId)
             IDTYPE_SHOP -> builder.accountUtil.readShopAcc(accountId.toInt())
             IDTYPE_SUBJECT -> builder.accountUtil.readSubject(accountId)
             IDTYPE_TRANSTYPE -> builder.accountUtil.readTranstype(accountId.toInt())
@@ -62,9 +62,9 @@
     @Suppress("UNCHECKED_CAST", "IMPLICIT_CAST_TO_ANY")
     fun <T> withLock(nowait: Boolean): T {
         return when (idType) {
-            IDTYPE_PERSON -> builder.accountUtil.readAccountForUpdate(accountId, true)
-            IDTYPE_SHOP -> builder.accountUtil.readShopAccForUpdate(accountId.toInt(), true)
-            IDTYPE_SUBJECT -> builder.accountUtil.readSubjectForUpdate(accountId, true)
+            IDTYPE_PERSON -> builder.accountUtil.readAccountForUpdateNowait(accountId)
+            IDTYPE_SHOP -> builder.accountUtil.readShopAcc(accountId.toInt())
+            IDTYPE_SUBJECT -> builder.accountUtil.readSubject(accountId)
             IDTYPE_TRANSTYPE -> builder.accountUtil.readTranstype(accountId.toInt())
             else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "账户类型未知type<$idType>")
         } as T
diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/pay_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/pay_service_impl.kt
index 176a67d..32883ae 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/pay_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/pay_service_impl.kt
@@ -9,6 +9,7 @@
 import com.supwisdom.dlpay.consume.domain.TUserdtl
 import com.supwisdom.dlpay.consume.service.AccountUtilServcie
 import com.supwisdom.dlpay.consume.service.PersonBalancePayService
+import com.supwisdom.dlpay.exception.TransactionException
 import com.supwisdom.dlpay.exception.TransactionProcessException
 import com.supwisdom.dlpay.framework.dao.ShopaccDao
 import com.supwisdom.dlpay.framework.dao.SubjectDao
@@ -18,7 +19,9 @@
 import com.supwisdom.dlpay.framework.domain.TTranstype
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.*
+import org.hibernate.exception.LockTimeoutException
 import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.dao.CannotAcquireLockException
 import org.springframework.stereotype.Service
 import javax.persistence.EntityManager
 import javax.persistence.PersistenceContext
@@ -26,6 +29,7 @@
 
 @Service
 class AccountUtilServcieImpl : AccountUtilServcie {
+
     @Autowired
     lateinit var accountDao: AccountDao
 
@@ -39,42 +43,36 @@
     lateinit var transtypeDao: TranstypeDao
 
 
-    override fun readAccountForUpdate(userid: String, nowait: Boolean): TAccount {
-        return accountDao.getByAccnoForUpdateNowait(userid)
+    override fun readAccountForUpdateNowait(userid: String): TAccount {
+        return try {
+            accountDao.getByUseridForUpdateNowait(userid)
+                    ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "账户<$userid>不存在")
+        } catch (ex: Exception) {
+            when (ex) {
+                is CannotAcquireLockException, is LockTimeoutException -> throw TransactionException(TradeErrorCode.ACCOUNT_TRADE_BUSY, "账户<$userid>交易繁忙，请稍后再试")
+                else -> throw ex
+            }
+        }
     }
 
     override fun readAccount(userid: String): TAccount {
-        accountDao.findByUserid(userid).let {
-            if (null != it) {
-                return it
-            }
-            throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "账户<$userid>不存在")
-        }
-    }
-
-    override fun readShopAccForUpdate(shopId: Int, nowait: Boolean): TShopacc {
-        return shopaccDao.getShopAccForUpdate(shopId)
+        return accountDao.findByUserid(userid)
+                ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "账户<$userid>不存在")
     }
 
     override fun readShopAcc(shopId: Int): TShopacc {
-        shopaccDao.findByShopid(shopId).let {
-            if (null != it) {
-                return it
-            }
-            throw TransactionProcessException(TradeErrorCode.SHOP_NOT_EXISTS, "商户<$shopId>不存在")
-        }
-    }
-
-    override fun readSubjectForUpdate(subjno: String, nowait: Boolean): TSubject {
-        return subjectDao.getOne(subjno)
+        return shopaccDao.findByShopid(shopId)
+                ?: throw TransactionProcessException(TradeErrorCode.SHOP_NOT_EXISTS, "商户<$shopId>不存在")
     }
 
     override fun readSubject(subjno: String): TSubject {
-        return subjectDao.getOne(subjno)
+        return subjectDao.findBySubjno(subjno)
+                ?: throw TransactionProcessException(TradeErrorCode.SUBJECT_NOT_EXISTS, "科目<$subjno>不存在")
     }
 
     override fun readTranstype(transtype: Int): TTranstype {
-        return transtypeDao.getOne(transtype)
+        return transtypeDao.findByTranstype(transtype)
+                ?: throw TransactionProcessException(TradeErrorCode.SUBJECT_NOT_EXISTS, "交易类型<$transtype>未配置")
     }
 }
 
@@ -96,26 +94,37 @@
 
 
     private fun getlockAccount(accno: String): TAccount {
-        //TODO 等待锁
-        return accountDao.getOne(accno)
+        return accountDao.getByAccnoForUpdate(accno)
+                ?: throw throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "账号<$accno>不存在")
     }
 
     private fun getlockAccountNowait(accno: String): TAccount {
-        //TODO 等待锁
-        return accountDao.getOne(accno)
+        return try {
+            accountDao.getByAccnoForUpdateNowait(accno)
+                    ?: throw throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "账号<$accno>不存在")
+        } catch (ex: Exception) {
+            when (ex) {
+                is CannotAcquireLockException, is LockTimeoutException -> throw TransactionException(TradeErrorCode.ACCOUNT_TRADE_BUSY, "账号<$accno>交易繁忙，请稍后再试")
+                else -> throw ex
+            }
+        }
     }
 
     private fun getLockUserdtlNowait(refno: String): TUserdtl {
-        userdtlDao.findByRefnoForUpdate(refno).let {
-            if (null != it) {
-                return it
+        return try {
+            userdtlDao.findByRefnoForUpdateNowait(refno)
+                    ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS, "交易参考号<$refno>不存在")
+        } catch (ex: Exception) {
+            when (ex) {
+                is CannotAcquireLockException, is LockTimeoutException -> throw TransactionException(TradeErrorCode.LOCK_READ_TIMEOUT, "交易参考号<$refno>被锁定，请稍后再试")
+                else -> throw ex
             }
-            throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS, "交易参考号<$refno>不存在")
         }
     }
 
     private fun getLockUserdtl(refno: String): TUserdtl {
         return userdtlDao.findByRefnoForUpdate(refno)
+                ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS, "交易参考号<$refno>不存在")
     }
 
     private fun checkOuttradenoExist(outtradeno: String): Boolean {
@@ -135,7 +144,6 @@
         if (!overdraft && account.checkOverdraft())
             throw TransactionProcessException(TradeErrorCode.SHORT_BALANCE_ERROR, "账户<$accno>余额不足")
 
-        account.tac = account.generateTac()
         return accountDao.save(account) //入库更新
     }
 
diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/service/pay_service.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/service/pay_service.kt
index 7bf801e..0c77e4c 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/consume/service/pay_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/service/pay_service.kt
@@ -6,16 +6,19 @@
 import com.supwisdom.dlpay.framework.domain.TShopacc
 import com.supwisdom.dlpay.framework.domain.TSubject
 import com.supwisdom.dlpay.framework.domain.TTranstype
+import org.springframework.transaction.annotation.Propagation
+import org.springframework.transaction.annotation.Transactional
 
 interface AccountUtilServcie {
 
-    fun readAccountForUpdate(userid: String, nowait: Boolean): TAccount
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
+    fun readAccountForUpdateNowait(userid: String): TAccount
+
+
     fun readAccount(userid: String): TAccount
 
-    fun readShopAccForUpdate(shopId: Int, nowait: Boolean): TShopacc
     fun readShopAcc(shopId: Int): TShopacc
 
-    fun readSubjectForUpdate(subjno: String, nowait: Boolean): TSubject
     fun readSubject(subjno: String): TSubject
 
     fun readTranstype(transtype: Int): TTranstype
@@ -26,18 +29,22 @@
     /**
      * 一步完成交易
      */
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
     fun process(builder: PersonTransBuilder): TUserdtl
 
     /**
      * 两步交易，交易初始化方法，检查交易参数，记录交易流水
      */
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
     fun init(builder: PersonTransBuilder): TUserdtl
 
     /**
      * 两步交易，完成交易过程，包括更新交易状态（成功、失败），更新借贷双方余额
      */
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
     fun finish(paydtl: TUserdtl, status: String, businessData: Map<String, String>?): TUserdtl
 
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
     fun finish(refno: String, status: String, businessData: Map<String, String>?): TUserdtl
 
     /**
@@ -45,9 +52,10 @@
      * 如果交易记录被锁，立刻抛出异常
      * @throws TransactionProcessException
      */
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
     fun wip(paydtl: TUserdtl): TUserdtl
 
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
     fun wip(refno: String): TUserdtl
 
-
 }
\ No newline at end of file
