重构代码,优化kontlin 代码风格
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
         }