diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java b/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java
index 376b528..bb52bba 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java
@@ -72,7 +72,7 @@
   private Double reverseAmount = 0D; //撤销金额填写
 
   @Column(name = "TRADEFLAG", nullable = false, length = 10)
-  private String tradeflag; //deposit-充值；pay-消费
+  private String tradeflag; // out - 支出，in - 收入
 
   @Column(name = "REMARK", length = 240)
   private String remark;
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TShopdtl.java b/src/main/java/com/supwisdom/dlpay/api/domain/TShopdtl.java
index 14dcb5d..d65da13 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TShopdtl.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TShopdtl.java
@@ -39,8 +39,11 @@
   @Column(name = "payinfo", length = 200)
   private String payInfo;
 
-  @Column(name = "tradeflag", length = 6)
-  private String tradeflag;
+  @Column(name = "tradeflag", length = 6, nullable = false)
+  private String tradeflag; // out - 支出 ， in - 收入
+
+  @Column(name = "TRANSDESC", length = 240)
+  private String transdesc; //交易描述
 
   @Column(name = "status", length = 20)
   private String status;
@@ -51,6 +54,9 @@
   @Column(name = "OPPOSITEACCNAME", length = 200)
   private String oppositeAccName;
 
+  @Column(name = "REMARK", length = 240)
+  private String remark;
+
   public String getRefno() {
     return refno;
   }
@@ -162,4 +168,20 @@
   public void setTradeflag(String tradeflag) {
     this.tradeflag = tradeflag;
   }
+
+  public String getTransdesc() {
+    return transdesc;
+  }
+
+  public void setTransdesc(String transdesc) {
+    this.transdesc = transdesc;
+  }
+
+  public String getRemark() {
+    return remark;
+  }
+
+  public void setRemark(String remark) {
+    this.remark = remark;
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java b/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java
index 6c7507d..78983ae 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java
@@ -1,7 +1,5 @@
 package com.supwisdom.dlpay.api.domain;
 
-import com.supwisdom.dlpay.framework.domain.TSubject;
-
 import javax.persistence.*;
 
 import java.sql.Timestamp;
@@ -185,4 +183,37 @@
   public void setEndTime(Timestamp endTime) {
     this.endTime = endTime;
   }
+
+  public Double sumAmountByAccno(String accno, String subjno,
+                                 int balanceFlag, String debitOrCredit) {
+    Double debitSum = 0.0;
+    Double creditSum = 0.0;
+    for (TDebitCreditDtl dtl : getDetails()) {
+      if (dtl.getDraccno().equals(accno) && dtl.getDrsubjno().equals(subjno)) {
+        debitSum += dtl.getAmount();
+      }
+      if (dtl.getCraccno().equals(accno) && dtl.getCrsubjno().equals(subjno)) {
+        creditSum += dtl.getAmount();
+      }
+    }
+    if ("debit".equals(debitOrCredit)) {
+      if (balanceFlag == 2) {
+        return -debitSum;
+      } else {
+        return debitSum;
+      }
+    } else if ("credit".equals(debitOrCredit)) {
+      if (balanceFlag == 1) {
+        return -creditSum;
+      } else {
+        return creditSum;
+      }
+    } else {
+      if (balanceFlag == 2) {
+        return -(debitSum - creditSum);
+      } else {
+        return debitSum - creditSum;
+      }
+    }
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/APIRequestParam.java b/src/main/java/com/supwisdom/dlpay/framework/util/APIRequestParam.java
index 402a9b4..14fc1d7 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/APIRequestParam.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/APIRequestParam.java
@@ -9,7 +9,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-public class APIRequestParam {
+public abstract class APIRequestParam {
   @Sign
   private String sign;
   @Sign
@@ -97,4 +97,6 @@
     }
     return calcSignAndCheck(paramMap,key);
   }
+
+  public abstract boolean checkParam();
 }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt b/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt
index f96ba95..f47651d 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/advices.kt
@@ -1,22 +1,27 @@
 package com.supwisdom.dlpay.api
 
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
+import com.supwisdom.dlpay.framework.util.APIRequestParam
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
-import org.aspectj.lang.JoinPoint
+import mu.KotlinLogging
+import org.aspectj.lang.ProceedingJoinPoint
+import org.aspectj.lang.annotation.Around
 import org.aspectj.lang.annotation.Aspect
-import org.aspectj.lang.annotation.Before
 import org.aspectj.lang.annotation.Pointcut
 import org.springframework.http.ResponseEntity
 import org.springframework.stereotype.Component
 import org.springframework.web.bind.annotation.ExceptionHandler
 import org.springframework.web.bind.annotation.RestControllerAdvice
+import javax.servlet.http.HttpServletRequest
 
 
-@RestControllerAdvice
+@RestControllerAdvice("com.supwisdom.dlpay.api")
 class RestControllerAdvice {
+    val logger = KotlinLogging.logger { }
 
     @ExceptionHandler
-    fun handleException(ex: Exception): ResponseEntity<Any> {
+    fun handleException(ex: Exception, request: HttpServletRequest): ResponseEntity<Any> {
+        logger.error { "Request unhandler exception, url<${request.requestURI}>, ex<${ex.cause}>" }
         return ResponseEntity.ok().body(ResponseBodyBuilder.create()
                 .exception(TradeErrorCode.BUSINESS_DEAL_ERROR, ex.cause))
     }
@@ -26,14 +31,29 @@
 @Aspect
 class RestControllerAspect {
 
-    @Pointcut("execution( * com.supwisdom.dlpay.api..*(..))")
-    private fun beforeRequest() {
+    private val logger = KotlinLogging.logger { }
+
+    @Pointcut("@within(org.springframework.web.bind.annotation.RestController)")
+    fun restcontroller() {
     }
 
-    @Before("beforeRequest()")
-    fun check(point: JoinPoint) {
-        point.args.forEach {
-            println("request : $it")
+    @Pointcut("@annotation(org.springframework.web.bind.annotation.PostMapping)")
+    fun postmapping() {
+    }
+
+    @Around("restcontroller() && postmapping() && args(.., @RequestBody body)")
+    @Throws(Throwable::class)
+    fun logPostMethods(joinPoint: ProceedingJoinPoint, body: Any): Any {
+        return try {
+            if (body is APIRequestParam) {
+                body.checkParam()
+            }
+            val result = joinPoint.proceed()
+            logger.debug(result.toString())
+            result
+        } catch (t: Throwable) {
+            logger.error { "request error , ex<${t.message}>" }
+            throw t
         }
     }
 }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt b/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
index f498fee..6e06756 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
@@ -27,7 +27,7 @@
     @Sign
     var zipcode: String? = null
 
-    fun checkParam(): Boolean {
+    override fun checkParam(): Boolean {
         if (StringUtil.isEmpty(uid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "用户唯一号不能为空")
         if (StringUtil.isEmpty(name)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "姓名不能为空")
         if (!StringUtil.isEmpty(sex) && ConstantUtil.SEX_MALE != sex && ConstantUtil.SEX_FEMALE != sex) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "性别非法[male|female]")
@@ -47,7 +47,7 @@
     @Sign
     var uid: String? = null    // 用户ID二选一
 
-    fun checkParam(): Boolean {
+    override fun checkParam(): Boolean {
         if (StringUtil.isEmpty(userid) && StringUtil.isEmpty(uid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "用户唯一号不能为空")
 
         return true
@@ -78,7 +78,7 @@
     @Sign
     var zipcode: String? = null
 
-    fun checkParam(): Boolean {
+    override fun checkParam(): Boolean {
         if (StringUtil.isEmpty(userid) && StringUtil.isEmpty(uid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "用户唯一号不能为空")
         if (!StringUtil.isEmpty(sex) && ConstantUtil.SEX_MALE != sex && ConstantUtil.SEX_FEMALE != sex) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "性别非法[male|female]")
         if (!StringUtil.isEmpty(idtype) && !ConstantUtil.IDTYPE_DICTS.contains(idtype)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "证件类型非法")
@@ -118,7 +118,7 @@
     @Sign
     var zipcode: String? = null
 
-    fun checkParam(): Boolean {
+    override fun checkParam(): Boolean {
         if (StringUtil.isEmpty(shopUniqueId)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "商户唯一号不能为空")
         if (ConstantUtil.SHOPTYPE_GROUP != shoptype && ConstantUtil.SHOPTYPE_LEAF != shoptype) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请指定商户类型")
         if (StringUtil.isEmpty(shopname)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "商户名称不能为空")
@@ -140,7 +140,7 @@
     @Sign
     var shopUniqueId: String? = null //注册传的商户唯一号
 
-    fun checkParam(): Boolean {
+    override fun checkParam(): Boolean {
         if (StringUtil.isEmpty(shopUniqueId) && null == shopid && StringUtil.isEmpty(shopaccno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "商户唯一标志不能为空")
 
         return true
@@ -166,7 +166,7 @@
     @Sign
     var shopaccno: String?=null
 
-    fun checkParam(): Boolean {
+    override fun checkParam(): Boolean {
         if (StringUtil.isEmpty(refno) && (StringUtil.isEmpty(billno) || StringUtil.isEmpty(shopaccno))) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "流水唯一号不能为空")
 
         return true
@@ -189,7 +189,7 @@
     @Sign
     var transtime: String = "" //必传
 
-    fun checkParam(): Boolean {
+    override fun checkParam(): Boolean {
         if (StringUtil.isEmpty(cardNo)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "卡唯一号不能为空")
         if (StringUtil.isEmpty(shopaccno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请指定交易商户")
         if (amount <= 0) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "交易金额必须大于零")
@@ -205,7 +205,7 @@
     @Sign
     var refno:String=""
 
-    fun checkParam(): Boolean {
+    override fun checkParam(): Boolean {
         if (StringUtil.isEmpty(refno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "交易参考号不能为空")
 
         return true
@@ -234,7 +234,7 @@
     @Sign
     var devphyid: String? = null
 
-    fun checkParam(): Boolean {
+    override fun checkParam(): Boolean {
 
         if (StringUtil.isEmpty(shopaccno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请指定交易商户")
         if (amount <= 0) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "交易金额必须大于零")
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
index 873aa8f..eb124dd 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
@@ -4,6 +4,7 @@
 import com.supwisdom.dlpay.api.CallService
 import com.supwisdom.dlpay.api.TransactionBuilder
 import com.supwisdom.dlpay.api.bean.*
+import com.supwisdom.dlpay.api.dao.TransactionMainDao
 import com.supwisdom.dlpay.api.domain.TAccount
 import com.supwisdom.dlpay.api.service.AccountUtilServcie
 import com.supwisdom.dlpay.api.service.ConsumePayService
@@ -42,6 +43,9 @@
     lateinit var commonService: CommonService
 
     @Autowired
+    lateinit var transactionMainDao: TransactionMainDao
+
+    @Autowired
     lateinit var transactionService: TransactionService
 
     /**
@@ -55,27 +59,26 @@
                         .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
             }
 
-//            val dtl = if (StringUtil.isEmpty(param.refno)) {
-//                personBalancePayService.getUserdtlForUpdateNowait(param.refno!!)
-//            } else {
-//                personBalancePayService.getUserdtlByBillnoForUpdateNowait(param.billno!!, param.shopaccno!!)
-//            }
-//            val dtl = if( param.refno.isNullOrEmpty()) {
-//               transactionService.
-//            }
-//            val person = dtl.userid?.let { userService.findPersonByUserid(dtl.userid) }
-//            return ResponseEntity.ok(ResponseBodyBuilder.create()
-//                    .data("refno", dtl.refno)
-//                    .data("amount", dtl.amount)
-//                    .data("paytype", dtl.paytype)
-//                    .data("payinfo", dtl.payinfo)
-//                    .also {
-//                        if (null != person) {
-//                            it.data("name", person.name)
-//                        }
-//                    }
-//                    .success("查询成功"))
-            TODO("未实现功能")
+            val dtl = transactionMainDao.findByRefnoForUpdate(param.refno)
+                    ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
+                            .fail(TradeErrorCode.TRANSACTION_NOT_EXISTS, "交易参考号错误<${param.refno}>"))
+
+            val person = if (dtl.person) {
+                userService.findPersonByUserid(dtl.personDtl.userid)
+            } else {
+                null
+            }
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .data("refno", dtl.refno)
+                    .data("amount", dtl.personDtl.amount)
+                    .data("paytype", dtl.personDtl.paytype)
+                    .data("payinfo", dtl.personDtl.payinfo)
+                    .also {
+                        if (null != person) {
+                            it.data("name", person.name)
+                        }
+                    }
+                    .success("查询成功"))
         } catch (ex: RequestParamCheckException) {
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .requestException(ex, "请求参数错误"))
@@ -83,7 +86,6 @@
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .transException(et, "查询错误"))
         }
-
     }
 
     private fun consumeMealer(@Suppress("UNUSED_PARAMETER") param: CitizenCardPayinitParam,
@@ -151,15 +153,18 @@
                     transTime = param.transtime
                     paytype = TradeDict.PAYTYPE_BALANCE
                     transCode = TradeCode.TRANSCODE_BALANCE_PAY
+                    payinfo = "账户余额消费"
+                    outId = shopacc.shopaccno
+                    outtradeno = param.billno
                 }.person(account).apply {
-                    description = "账户余额支付"
-                    summary = "账户余额消费"
+                    description = "账户余额消费"
                     amount = param.amount / 100.0
                     opposite = AccountProxy(shopacc)
+                    tradeOut()
                 }.and().shop(shopacc).apply {
-                    summary = "账户余额消费"
                     amount = param.amount / 100.0
                     opposite = AccountProxy(account)
+                    tradeIn()
                 }.and()
 
                 param.feelist?.forEach {
@@ -222,18 +227,16 @@
                     transTime = param.transtime
                     paytype = TradeDict.PAYTYPE_CITIZEN_CARD
                     payinfo = "市民卡代扣消费"
+                    description = "市民卡代扣消费"
                     outId = shopacc.shopaccno
                     outtradeno = param.billno
                 }.person(account).apply {
                     amount = param.amount / 100.0
                     opposite = AccountProxy(shopacc)
-                    description = "市民卡代扣消费"
-                    summary = "市民卡代扣消费"
                     tradeOut()
                 }.and().shop(shopacc).apply {
                     amount = param.amount / 100.0
                     opposite = AccountProxy(account)
-                    summary = "市民卡代扣消费"
                     tradeIn()
                 }.and().addDebitCreditRecord(AccountProxy(subject), AccountProxy(account),
                         param.amount / 100.0, "市民卡代扣消费")
@@ -316,12 +319,12 @@
      * ============================================================================
      * */
     @PostMapping("/ykt/payinit")
-    fun yktPayInit(@RequestBody param: YktCardPayinitParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
+    fun yktPayInit(@RequestBody param: YktCardPayinitParam, authentication: Authentication): ResponseEntity<Any> {
         try {
-//            if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
-//                return ResponseEntity.ok(ResponseBodyBuilder.create()
-//                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-//            }
+            if (param.checkParam() && param.checkSign(commonService.getSecretByAppid(authentication.name))) {
+                return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
+            }
 //
 //            val person = param.uid?.let { userService.findByThirdUniqueIdenty(it) } //没注册，可能匿名?
 //            if (consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_YKT_CARD, person == null)) {
@@ -376,9 +379,9 @@
      * ============================================================================
      * */
     @PostMapping("/ykt/payfinish")
-    fun yktPayFinish(@RequestBody param: CitizenCardPayfinishParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
+    fun yktPayFinish(@RequestBody param: CitizenCardPayfinishParam, authentication: Authentication): ResponseEntity<Any> {
         try {
-            if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
+            if (param.checkParam() && param.checkSign(commonService.getSecretByAppid(authentication.name))) {
                 return ResponseEntity.ok(ResponseBodyBuilder.create()
                         .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
             }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
index ac98e14..a077797 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
@@ -9,6 +9,7 @@
 import com.supwisdom.dlpay.exception.TransactionCheckException
 import com.supwisdom.dlpay.exception.TransactionProcessException
 import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.framework.util.Subject
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
 import org.springframework.beans.factory.annotation.Autowired
@@ -20,6 +21,11 @@
 @Service
 class TransactionServiceImpl : TransactionService {
 
+    companion object {
+        val PERSON_BALANCE_FLAG = 2
+        val SHOP_BALANCE_FLAG = 2
+    }
+
     @Autowired
     lateinit var transactionMainDao: TransactionMainDao
 
@@ -122,7 +128,6 @@
                 createTime = Timestamp(systemUtilService.sysdatetime.sysdate.time)
             }
 
-
             if (builder.hasPerson()) {
                 TPersondtl().apply {
                     this.refno = transaction.refno
@@ -147,6 +152,7 @@
                     oppositeAccNo = builder.person().opposite.getAccountNo()
                     oppositeAccName = builder.person().opposite.getAccountName()
                     reverseFlag = builder.reverseFlag
+                    remark = builder.person().remark
                     this.status = status
                 }.also {
                     // save persondtl
@@ -173,8 +179,10 @@
                     this.tradeflag = builder.shop().tradeFlag()
                     this.shopaccno = builder.shop().shopacc.shopaccno
                     this.shopname = builder.shop().shopacc.shopname
+                    this.transdesc = builder.shop().description
                     this.oppositeAccNo = builder.shop().opposite.getAccountNo()
                     this.oppositeAccName = builder.shop().opposite.getAccountName()
+                    this.remark = builder.shop().remark
                     this.status = status
                 }.also {
                     // save shopdtl
@@ -221,8 +229,9 @@
 
             if (builder.hasPerson()) {
                 val dc = getDebitOrCredit(builder.person().tradeFlag())
-                sumBalanceFromDetails(transaction.details, builder.person().person.accno,
-                        builder.person().person.subjno, 2, dc).also {
+                transaction.sumAmountByAccno(builder.person().person.accno,
+                        Subject.SUBJNO_PERSONAL_DEPOSIT,
+                        PERSON_BALANCE_FLAG, dc).also {
                     if (transaction.personDtl.amount != it) {
                         throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR,
                                 "输入金额错误，个人余额不符<${transaction.personDtl.amount}>")
@@ -232,8 +241,9 @@
 
             if (builder.hasShop()) {
                 val dc = getDebitOrCredit(builder.shop().tradeFlag())
-                sumBalanceFromDetails(transaction.details, builder.shop().shopacc.shopaccno,
-                        builder.shop().shopacc.subjno, 2, dc).also {
+                transaction.sumAmountByAccno(builder.shop().shopacc.shopaccno,
+                        Subject.SUBJNO_MACHANT_INCOME,
+                        SHOP_BALANCE_FLAG, dc).also {
                     if (transaction.shopDtl.amount != it) {
                         throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR,
                                 "输入金额错误，商户余额不符<${transaction.shopDtl.amount}>")
@@ -242,8 +252,8 @@
             }
 
             if (builder.hasSubject()) {
-                sumBalanceFromDetails(transaction.details, builder.subject().subject.subjno,
-                        transaction.subjectDtl.subjectno,
+                transaction.sumAmountByAccno(builder.subject().subject.subjno,
+                        builder.subject().subject.subjno,
                         builder.subject().subject.balflag,
                         "both").also {
                     if (transaction.subjectDtl.amount != it) {
@@ -277,38 +287,6 @@
         return builderRecords(builder, TradeDict.DTL_STATUS_WIP)
     }
 
-    private fun sumBalanceFromDetails(details: List<TDebitCreditDtl>,
-                                      accno: String, subjno: String,
-                                      balanceFlag: Int,
-                                      debitOrCredit: String = "debit"): Double {
-
-        val debitAmount = details.sumByDouble { line ->
-            if (line.drsubjno == subjno && line.draccno == accno) {
-                line.amount
-            } else {
-                0.0
-            }
-        }
-        val creditAmount = details.sumByDouble { line ->
-            if (line.crsubjno == subjno && line.craccno == accno) {
-                line.amount
-            } else {
-                0.0
-            }
-        }
-        return when (debitOrCredit) {
-            "debit" -> {
-                if (balanceFlag == 2) debitAmount * -1.0 else debitAmount
-            }
-            "credit" -> {
-                if (balanceFlag == 2) creditAmount else creditAmount * -1.0
-            }
-            "both" -> creditAmount - debitAmount
-            else -> throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR,
-                    "结算借贷方向余额错误")
-        }
-    }
-
     private fun updateRecordStatus(transaction: TTransactionMain, status: String) {
         if (transaction.person) {
             transaction.personDtl?.also {
@@ -387,25 +365,35 @@
         transaction.accdate = systemUtilService.accdate
         if (transaction.person) {
             // update account balance
-            transaction.personDtl?.let {
-                if (accountRepository.recalcAccountBalance(it, it.amount, false) != 1) {
-                    throw TransactionProcessException(TradeErrorCode.ACCOUNT_TRADE_BUSY,
-                            "个人账户交易冲突")
-                }
-                transaction.personDtl.accdate = transaction.accdate
-            } ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS,
-                    "个人流水<${transaction.refno}>不存在")
+            val amount = transaction.sumAmountByAccno(
+                    transaction.personDtl.accountNo, Subject.SUBJNO_PERSONAL_DEPOSIT,
+                    PERSON_BALANCE_FLAG, "both")
+            if (amount.compareTo(0.0) != 0) {
+                transaction.personDtl?.let {
+                    if (accountRepository.recalcAccountBalance(it, amount, false) != 1) {
+                        throw TransactionProcessException(TradeErrorCode.ACCOUNT_TRADE_BUSY,
+                                "个人账户交易冲突")
+                    }
+                    transaction.personDtl.accdate = transaction.accdate
+                } ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS,
+                        "个人流水<${transaction.refno}>不存在")
+            }
             transaction.personDtl.status = TradeDict.DTL_STATUS_SUCCESS
         }
         if (transaction.shop) {
             // update shop balance
-            transaction.shopDtl?.let {
-                if (shopaccRepository.recalcShopBalance(it, it.amount, false) != 1) {
-                    throw TransactionProcessException(TradeErrorCode.ACCOUNT_TRADE_BUSY,
-                            "商户账户交易冲突")
-                }
-            } ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS,
-                    "商户流水<${transaction.refno}>不存在")
+            val amount = transaction.sumAmountByAccno(
+                    transaction.shopDtl.shopaccno, Subject.SUBJNO_MACHANT_INCOME,
+                    SHOP_BALANCE_FLAG, "both")
+            if (amount.compareTo(0.0) != 0) {
+                transaction.shopDtl?.let {
+                    if (shopaccRepository.recalcShopBalance(it, it.amount, false) != 1) {
+                        throw TransactionProcessException(TradeErrorCode.ACCOUNT_TRADE_BUSY,
+                                "商户账户交易冲突")
+                    }
+                } ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS,
+                        "商户流水<${transaction.refno}>不存在")
+            }
             transaction.shopDtl.status = TradeDict.DTL_STATUS_SUCCESS
             transaction.shopDtl.accdate = transaction.accdate
         }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt b/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
index 40abd48..7dd9f80 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
@@ -22,6 +22,15 @@
             return if (field.isEmpty()) parent.payinfo else field
         }
 
+    var description: String = ""
+        get() {
+            return if (field.isEmpty()) parent.description else field
+        }
+
+    var remark: String = ""
+        get() {
+            return if (field.isEmpty()) parent.remark else field
+        }
 
     lateinit var opposite: AccountProxy<*>
 
@@ -55,22 +64,16 @@
 class PersonTranactionBuilder(parent: TransactionBuilder, val person: TAccount)
     : SubTransactionBuilder(parent) {
     var amount: Double = 0.0
-    var summary: String = ""
-    var description: String = ""
-
 }
 
 class ShopTransactionBuilder(parent: TransactionBuilder, val shopacc: TShopacc)
     : SubTransactionBuilder(parent) {
     var amount: Double = 0.0
-    var summary: String = ""
 }
 
 class SubjectTransactionBuilder(parent: TransactionBuilder, val subject: TSubject)
     : SubTransactionBuilder(parent) {
     var amount: Double = 0.0
-    var summary: String = ""
-
 }
 
 class AccountProxy<T>(private val accountObj: T) {
@@ -130,6 +133,8 @@
     var outtradeno: String = "" //第三方流水号
     var outId: String = ""
     var reverseFlag: String = "none"
+    var description: String = ""
+    var remark: String = ""
 
     fun person(): PersonTranactionBuilder {
         return this.personBuilder
