diff --git a/build.gradle b/build.gradle
index e60f773..350290f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -30,26 +30,26 @@
     implementation 'org.springframework.boot:spring-boot-starter-security'
     implementation 'org.springframework.security:spring-security-oauth2-client'
     implementation 'org.springframework.security:spring-security-oauth2-jose'
-    implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
     implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
-    implementation 'org.springframework.session:spring-session-data-redis:2.0.10.RELEASE'
+    implementation 'org.springframework.session:spring-session-data-redis'
+    implementation 'org.springframework.social:spring-social-web:1.1.6.RELEASE'
     implementation 'org.jetbrains.kotlin:kotlin-reflect'
     implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
 
+    implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
+
     implementation 'org.postgresql:postgresql:42.2.5'
+    implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
     implementation 'com.jcabi:jcabi-manifests:1.1'
     implementation 'org.bitbucket.b_c:jose4j:0.6.3'
-    implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
-    implementation 'org.springframework.social:spring-social-web:1.1.6.RELEASE'
     implementation 'io.github.microutils:kotlin-logging:1.6.26'
+    implementation 'org.slf4j:slf4j-parent:1.7.26'
     implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
     implementation group: 'com.sun.jersey', name: 'jersey-client', version: '1.19'
     implementation group: 'javax.servlet', name: 'jstl', version: '1.2'
     implementation group: 'taglibs', name: 'standard', version: '1.1.2'
     implementation group: 'commons-codec', name: 'commons-codec', version: '1.6'
     implementation 'org.flywaydb:flyway-core'
-//    implementation group: 'javax.servlet.jsp', name: 'jsp-api', version: '2.1'
-    implementation group: 'log4j', name: 'log4j', version: '1.2.16'
     implementation files('libs/ojdbc6.jar')
 
 
diff --git a/gradle.properties b/gradle.properties
index b59ebef..f72e65c 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,4 +1,4 @@
 springbootVersion = 2.1.3.RELEASE
-kotlinVersion = 1.2.41
+kotlinVersion = 1.3.31
 payapiVersion = 1.0
 jdkVersion = 1.8
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java b/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
index 313b5aa..46ca41f 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
@@ -5,7 +5,8 @@
 import com.supwisdom.dlpay.framework.service.DayendSettleService;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
 import com.supwisdom.dlpay.framework.util.StringUtil;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
 public class DayendSettleTask {
@@ -16,7 +17,7 @@
 
   private TSettleLog settleLog;
 
-  private static final Logger logger = Logger.getLogger(DayendSettleTask.class);
+  private static final Logger logger = LoggerFactory.getLogger(DayendSettleTask.class);
 
 
   public void doSettleTask() {
@@ -47,7 +48,7 @@
 
       //step2: 对账判断
       long t3 = System.currentTimeMillis();
-      if(!checkChkfiles()){
+      if (!checkChkfiles()) {
         logger.error("对账未完成，退出结算！");
         return;
       }
@@ -76,12 +77,12 @@
     }
   }
 
-  private boolean checkAccounts(){
+  private boolean checkAccounts() {
     //TODO: 账户余额校验，生成账户日结表数据
     return true;
   }
 
-  private boolean checkChkfiles(){
+  private boolean checkChkfiles() {
     //TODO: 结算前是否要求所有对账完成
     return true;
   }
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 cbb0805..59c85cf 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
@@ -2,12 +2,19 @@
 
 import com.supwisdom.dlpay.api.dao.DebitCreditDtlDao;
 import com.supwisdom.dlpay.framework.dao.*;
-import com.supwisdom.dlpay.framework.data.*;
+import com.supwisdom.dlpay.framework.data.FSubjectInfoBean;
+import com.supwisdom.dlpay.framework.data.MerchBean;
+import com.supwisdom.dlpay.framework.data.SubjectInfoBean;
+import com.supwisdom.dlpay.framework.data.VoucherTemp;
 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.*;
-import org.apache.log4j.Logger;
+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.Subject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -48,7 +55,7 @@
   private DebitCreditDtlDao debitCreditDtlDao;
 
 
-  private static final Logger logger = Logger.getLogger(DayendSettleServiceImpl.class);
+  private static final Logger logger = LoggerFactory.getLogger(DayendSettleServiceImpl.class);
 
   private int hostdate;
   private int periodYear; // 记账年份
diff --git a/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java b/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
index 80fad1f..eee9e5a 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
@@ -8,9 +8,9 @@
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.NumberUtil;
 import com.supwisdom.dlpay.framework.util.StringUtil;
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.text.SimpleDateFormat;
@@ -32,7 +32,7 @@
   @Autowired
   private BusinessparaDao businessparaDao;
 
-  private static final Logger logger = Logger.getLogger(SystemUtilServiceImpl.class);
+  private static final Logger logger = LoggerFactory.getLogger(SystemUtilServiceImpl.class);
 
   public static class SystemDateTimeImpl implements SystemDateTime {
     private Date now;
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 78ea9d4..402a9b4 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/APIRequestParam.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/APIRequestParam.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.framework.util;
 
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.beans.Introspector;
 import java.lang.reflect.Field;
@@ -16,7 +17,7 @@
   @Sign
   private String version;
 
-  private static final Logger logger = Logger.getLogger(APIRequestParam.class);
+  private static final Logger logger = LoggerFactory.getLogger(APIRequestParam.class);
 
   public String getSign() {
     return sign;
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
index a6b733e..3a7e013 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
@@ -1,8 +1,8 @@
 package com.supwisdom.dlpay.framework.util;
 
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
-import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
@@ -10,7 +10,7 @@
 import java.util.TimeZone;
 
 public class DateUtil {
-  private static final Logger logger = Logger.getLogger(DateUtil.class);
+  private static final Logger logger = LoggerFactory.getLogger(DateUtil.class);
   public static final String DATE_FMT = "yyyyMMdd";
   public static final String TIME_FMT = "HHmmss";
   public static final String DATETIME_FMT = "yyyyMMddHHmmss";
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/comsume_builder.kt b/src/main/kotlin/com/supwisdom/dlpay/api/comsume_builder.kt
index ff29e99..0304141 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/comsume_builder.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/comsume_builder.kt
@@ -177,6 +177,7 @@
         this.extendMap.plus(param)
         return this
     }
+
     fun addResult(key: String, value: String): PersonTransBuilder {
         this.resultMap.plus(mapOf(key to value))
         return this
@@ -248,7 +249,9 @@
                     it.accno to it.subjno
                 }
                 AccountHolder.IDTYPE_SHOP -> holder.withLock<TShopacc>().let {
-                    if(null==this.shopaccno) this.shopaccno=it.shopaccno
+                    if (this.shopaccno.isEmpty()) {
+                        this.shopaccno = it.shopaccno
+                    }
                     it.shopaccno to it.subjno
                 }
                 AccountHolder.IDTYPE_SUBJECT -> holder.withLock<TSubject>().let {
@@ -262,7 +265,9 @@
                     it.accno to it.subjno
                 }
                 AccountHolder.IDTYPE_SHOP -> holder.get<TShopacc>().let {
-                    if(null==this.shopaccno) this.shopaccno=it.shopaccno
+                    if (this.shopaccno.isEmpty()) {
+                        this.shopaccno = it.shopaccno
+                    }
                     it.shopaccno to it.subjno
                 }
                 AccountHolder.IDTYPE_SUBJECT -> holder.get<TSubject>().let {
@@ -278,14 +283,14 @@
         debit.builder = this
         credit.builder = this
 
-        var debitAccNo = ""
-        var debitSubjNo = ""
+        var debitAccNo: String
+        var debitSubjNo: String
         getAccountAndSubjNo(debit).apply {
             debitAccNo = first
             debitSubjNo = second
         }
-        var creditAccNo = ""
-        var creditSubjNo = ""
+        var creditAccNo: String
+        var creditSubjNo: String
         getAccountAndSubjNo(credit).apply {
             creditAccNo = first
             creditSubjNo = second
@@ -340,27 +345,27 @@
         return service.process(this)
     }
 
-    fun init(service: PersonBalancePayService) : TUserdtl{
+    fun init(service: PersonBalancePayService): TUserdtl {
         prepareData()
         preCheckAccount()
         return service.init(this)
     }
 
     fun wip(service: PersonBalancePayService): TUserdtl {
-        if (null == this.refno)
+        if (this.refno.isEmpty())
             throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易参考号<refno>未指定")
         return service.wip(this)
     }
 
     fun finish(service: PersonBalancePayService, status: String): TUserdtl {
-        if (null == this.refno)
+        if (this.refno.isEmpty())
             throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易参考号<refno>未指定")
         this.status = status
         return service.finish(this)
     }
 
-    fun success(service: PersonBalancePayService): TUserdtl{
-        if (null == this.refno)
+    fun success(service: PersonBalancePayService): TUserdtl {
+        if (this.refno.isEmpty())
             throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易参考号<refno>未指定")
         this.status = TradeDict.DTL_STATUS_SUCCESS
         return service.finish(this)
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 066e43c..d8390bc 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
@@ -259,7 +259,7 @@
                         .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
             }
 
-            val person = param.uid?.let { userService.findByThirdUniqueIdenty(it) } ?: null //没注册，可能匿名?
+            val person = param.uid?.let { userService.findByThirdUniqueIdenty(it) } //没注册，可能匿名?
             if (consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_YKT_CARD, person==null)) {
                 val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
                         .chooseTradetype(Tradetype.CONSUME) //消费
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt
index cc262cb..f099608 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt
@@ -35,7 +35,7 @@
     @Autowired
     lateinit var accountUtilServcie: AccountUtilServcie
 
-    @RequestMapping(value = "/wechat")
+    @RequestMapping(value = ["/wechat"])
     @ResponseBody
     fun index(@PathVariable schema: String, request: HttpServletRequest,
               response: HttpServletResponse): String {
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt
index 5f92a0c..f6cd045 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt
@@ -35,10 +35,10 @@
                         .fail(TradeErrorCode.BUSINESS_SHOP_EXISTS, "该商户唯一号[${param.shopUniqueId}]已经存在"))
             }
 
-            param.shopname = param.shopname?.let { URLDecoder.decode(param.shopname, Charsets.UTF_8.toString()) } //解码
+            param.shopname = param.shopname.let { URLDecoder.decode(param.shopname, Charsets.UTF_8.toString()) } //解码
             param.contactman = param.contactman?.let { URLDecoder.decode(param.contactman, Charsets.UTF_8.toString()) } //解码
             param.address = param.address?.let { URLDecoder.decode(param.address, Charsets.UTF_8.toString()) } //解码
-            shopService.registerShop(param)?.let {
+            shopService.registerShop(param).let {
                 ResponseEntity.ok(ResponseBodyBuilder.create()
                         .data("shopid", it.shopid)
                         .data("shopaccno", it.shopaccno ?: "")
diff --git a/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt b/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt
index 0293457..58f6bf3 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt
@@ -5,14 +5,14 @@
 import com.supwisdom.dlpay.exception.TransactionCheckException
 import com.supwisdom.dlpay.exception.TransactionException
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
-import org.apache.log4j.Logger
+import mu.KotlinLogging
 
 
 class ResponseBodyBuilder private constructor() {
     companion object {
         private const val INVALIDE_RETCODE = -0x7FFFFFFF
         private val RESERVED_KEY = setOf("retcode", "retmsg", "exception")
-        private val LOGGER = Logger.getLogger(ResponseBodyBuilder::class.java)
+        private val LOGGER = KotlinLogging.logger {}
         fun create() = ResponseBodyBuilder()
     }
 
diff --git a/src/main/kotlin/com/supwisdom/dlpay/migration.kt b/src/main/kotlin/com/supwisdom/dlpay/migration.kt
index 5495bca..c9fe298 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/migration.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/migration.kt
@@ -15,7 +15,7 @@
      */
     @Bean
     fun flywayInitializer(flyway: Flyway): FlywayMigrationInitializer {
-        return FlywayMigrationInitializer(flyway) { f -> }
+        return FlywayMigrationInitializer(flyway) { }
     }
 
 
