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 67257c6..a046753 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt
@@ -63,9 +63,10 @@
                             val amount: Double, val summary: String,
                             val rowno: Int)
 
-    // 输入参数，调用接口时指定的参数值
+    ///////////////////////////////////////////////////////////////////////////////
+    // 以下为输入参数，调用接口时指定的参数值
     lateinit var person: TPerson
-    lateinit var tradetype:Tradetype
+    lateinit var tradetype: Tradetype
 
     var transcode = 0
 
@@ -77,12 +78,6 @@
     var overdraft = false
     var description = ""
 
-    // 内部参数，不需要调用者处理
-    val details = mutableListOf<TransDetail>()
-    var amount: Double = 0.0
-    var accountUtil = accUitl
-
-
     /**
      * 支付方式
      * */
@@ -94,6 +89,13 @@
      * */
     var outtradeno = "" //发起支付系统的流水号（对接系统根据此流水号查询本地流水对账）
 
+    ////////////////////////////////////////////////////////////////////////////////////
+    // 以下为内部参数，不需要调用者处理
+    val details = mutableListOf<TransDetail>()
+    var amount: Double = 0.0
+    var accountUtil = accUitl
+
+    /////////////////////////////////////////////
 
     fun setOwner(per: TPerson): PersonTransBuilder {
         this.person = per
@@ -139,25 +141,20 @@
     }
 
     private fun prepareData() {
-        if (null == this.tradetype) {
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未指定交易类型")
-        }
-        if(transcode==0){
+        if (transcode == 0) {
             throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未指定交易码")
         }
 
-        when(this.tradetype){
+        // fixme : 是否要检查 recharge , consume 之外的类型
+        when (this.tradetype) {
             //充值必须指明用户和支付方式
             Tradetype.RECHARGE -> {
-                if (null == this.person)
-                    throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未指定充值账户")
-
                 if (StringUtil.isEmpty(this.paytype))
                     throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未指定充值方式")
             }
 
             //消费
-            Tradetype.CONSUME ->{
+            Tradetype.CONSUME -> {
                 if (StringUtil.isEmpty(this.paytype))
                     this.paytype = TradeDict.PAYTYPE_BALANCE   //默认余额支付
             }
@@ -167,36 +164,39 @@
         if (this.details.size < 1) {
             throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未指定交易明细")
         }
-        if (null != this.person) {
-            var buyer = accountUtil.readAccount(person.userid) //判断是一个人的流水
-            for (detail in details) {
-                if (detail.debitSubjNo.equals(buyer.subjno) && !detail.debitAccNo.equals(buyer.accno))
-                    throw throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易明细用户错误")
+        val buyer = accountUtil.readAccount(person.userid) //判断是一个人的流水
 
-                if (detail.creditSubjNo.equals(buyer.subjno) && !detail.creditAccNo.equals(buyer.accno))
-                    throw throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易明细用户错误")
+        amount = this.details.sumByDouble { detail ->
+            if (detail.debitSubjNo == buyer.subjno && detail.debitAccNo != buyer.accno) {
+                throw throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易明细用户错误")
             }
-        }
-        amount = this.details.sumByDouble { it.amount }
 
-        if (!StringUtil.isEmpty(this.transDate) && !DateUtil.checkDatetimeValid(this.transDate, "yyyyMMdd")) {
+            if (detail.creditSubjNo == buyer.subjno && detail.creditAccNo != buyer.accno) {
+                throw throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易明细用户错误")
+            }
+            detail.amount
+        }
+
+        if (!StringUtil.isEmpty(this.transDate) &&
+                !DateUtil.checkDatetimeValid(this.transDate, "yyyyMMdd")) {
             throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易日期格式错误[yyyyMMdd]")
         }
-        if (!StringUtil.isEmpty(this.transTime) && !DateUtil.checkDatetimeValid(this.transTime, "HHmmss")) {
+        if (!StringUtil.isEmpty(this.transTime) &&
+                !DateUtil.checkDatetimeValid(this.transTime, "HHmmss")) {
             throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易时间格式错误[HHmmss]")
         }
 
-        if(StringUtil.isEmpty(this.outtradeno)){
+        if (StringUtil.isEmpty(this.outtradeno)) {
             throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未传递外部流水号")
         }
     }
 
     private fun preCheckAccount() {
-        if (null != this.person) {
-            when (person.status) {
-                TradeDict.STATUS_CLOSED -> throw TransactionCheckException(TradeErrorCode.PERSON_STATUS_ERROR, "用户已注销")
-                TradeDict.STATUS_LOCKED -> throw TransactionCheckException(TradeErrorCode.PERSON_STATUS_ERROR, "用户已冻结锁定")
-            }
+        when (person.status) {
+            TradeDict.STATUS_CLOSED ->
+                throw TransactionCheckException(TradeErrorCode.PERSON_STATUS_ERROR, "用户已注销")
+            TradeDict.STATUS_LOCKED ->
+                throw TransactionCheckException(TradeErrorCode.PERSON_STATUS_ERROR, "用户已冻结锁定")
         }
     }
 
diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/controller/consume_service.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/controller/consume_service.kt
index 6b8c419..06f3cae 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/consume/controller/consume_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/consume/controller/consume_service.kt
@@ -112,10 +112,10 @@
 
     @PostMapping("/ykt/payfinish")
     fun yktPayFinish(refno: String, yktshopid: String, devphyid: String?): ResponseEntity<Any> {
-        var dtl = personBalancePayService.wip(refno)
-        var person = personService.getPersonByUserid(dtl.userid)
+        val dtl = personBalancePayService.wip(refno)
+        val person = personService.getPersonByUserid(dtl.userid)
         val code = CallService.callYktPay(paytypeService.getPaytypeConfigByPaytype(PaytypeUtil.YKTPAY),
-                dtl, DateUtil.getNow(),person?.thirdUniqueIdenty,yktshopid,devphyid)
+                dtl, DateUtil.getNow(), person.thirdUniqueIdenty,yktshopid,devphyid)
         return if (code.retcode == "0") {
             val suc = PersonTransBuilder.newBuilder(accountUtilServcie)
                     .done(dtl.refno, TradeDict.DTL_STATUS_SUCCESS, personBalancePayService)
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 e0d792f..c85139d 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
@@ -72,12 +72,8 @@
     }
 
     override fun readSubject(subjno: String): TSubject {
-        subjectDao.getOne(subjno).let {
-            if (null != it) {
-                return it
-            }
-            throw TransactionProcessException(TradeErrorCode.SUBJECT_NOT_EXISTS, "科目<$subjno>不存在")
-        }
+        return subjectDao.getOne(subjno)
+//            throw TransactionProcessException(TradeErrorCode.SUBJECT_NOT_EXISTS, "科目<$subjno>不存在")
     }
 
     override fun readTranstype(transtype: Int): TTranstype {
@@ -157,10 +153,10 @@
     }
 
     override fun init(builder: PersonTransBuilder): TUserdtl {
-        var userdtl = TUserdtl()
+        val userdtl = TUserdtl()
         userdtl.refno = systemUtilService.refno
         userdtl.accdate = systemUtilService.accdate
-        userdtl.userid = builder.person?.userid
+        userdtl.userid = builder.person.userid
         if (StringUtil.isEmpty(builder.transDate)) {
             userdtl.transdate = systemUtilService.sysdatetime.hostdate
         } else {
@@ -194,17 +190,18 @@
         userdtl.status = TradeDict.DTL_STATUS_INIT
         userdtlDao.save(userdtl)
 
-        for (detail in builder.details) {
-            var dtl = TDebitCreditDtl()
-            dtl.refno = userdtl.refno
-            dtl.seqno = detail.rowno
-            dtl.drsubjno = detail.debitSubjNo
-            dtl.draccno = detail.debitAccNo
-            dtl.crsubjno = detail.creditSubjNo
-            dtl.craccno = detail.creditAccNo
-            dtl.amount = detail.amount
-            dtl.summary = detail.summary
-            debitCreditDtlDao.save(dtl)
+        builder.details.forEach {
+            TDebitCreditDtl().apply {
+                refno = userdtl.refno
+                seqno = it.rowno
+                drsubjno = it.debitSubjNo
+                draccno = it.debitAccNo
+                crsubjno = it.creditSubjNo
+                craccno = it.creditAccNo
+                amount = it.amount
+                summary = it.summary
+                debitCreditDtlDao.save(this)
+            }
         }
         return userdtl
     }
@@ -214,8 +211,8 @@
     }
 
     override fun finish(refno: String, status: String, businessData: Map<String, String>?): TUserdtl {
-        var userdtl = getLockUserdtl(refno)
-        when (status) {
+        val userdtl = getLockUserdtl(refno)
+        return when (status) {
             TradeDict.DTL_STATUS_FAIL -> {
                 //失败
                 if (TradeDict.DTL_STATUS_SUCCESS == userdtl.status)
@@ -223,15 +220,14 @@
                 userdtl.status = TradeDict.DTL_STATUS_FAIL
                 userdtl.endtime = systemUtilService.sysdatetime.hostdatetime
                 userdtl.remark = businessData?.get("errmsg")
-                return userdtlDao.save(userdtl)
+                userdtlDao.save(userdtl)
             }
-
             TradeDict.DTL_STATUS_SUCCESS -> {
                 //成功
                 if (TradeDict.DTL_STATUS_SUCCESS == userdtl.status)
                     return userdtl //已成功直接返回
 
-                for (detail in debitCreditDtlDao.findByRefno(userdtl.refno)) {
+                debitCreditDtlDao.findByRefno(userdtl.refno).forEach { detail ->
                     //个人账户入账
                     if (TradeDict.SUBJNO_ACCOUNT == detail.drsubjno) {
                         doDealAccount(detail.draccno, -1 * detail.amount, false) //借方消费
@@ -253,9 +249,8 @@
                 userdtl.accdate = systemUtilService.accdate //入账成功时更新
                 userdtl.endtime = systemUtilService.sysdatetime.hostdatetime
                 //TODO 存储一些业务参数
-                return userdtlDao.save(userdtl)
+                userdtlDao.save(userdtl)
             }
-
             else -> throw TransactionProcessException(TradeErrorCode.TRANSDTL_STATUS_ERROR, "未指定明确的交易结束状态")
         }
     }
@@ -265,8 +260,8 @@
     }
 
     override fun wip(refno: String): TUserdtl {
-        var userdtl = getLockUserdtlNowait(refno)
-        if(TradeDict.DTL_STATUS_WIP == userdtl.status){
+        val userdtl = getLockUserdtlNowait(refno)
+        if (TradeDict.DTL_STATUS_WIP == userdtl.status) {
             return userdtl
         }
 
