diff --git a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
index 9033d45..32ca0f3 100644
--- a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
+++ b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
@@ -80,15 +80,16 @@
     assertThat("pay initialized " + payInit.getRetmsg() + payInit.getException(),
         payInit.getRetcode(), equalTo(0));
   }
+
   @Test
-  public void openShopAccount(){
+  public void openShopAccount() {
 
     ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
     helper.login(appid, secret);
     ApiVersionResponse version = apiCommonProxy.apiVersion();
 
     assertThat("get version error " + version.getException(),
-            version.getVersion(), notNullValue());
+        version.getVersion(), notNullValue());
     OpenShopParam param = new OpenShopParam();
     param.setShopUniqueId("35315266");
     param.setShoptype("normal");
@@ -98,17 +99,18 @@
     param.setTenantid("default");
     ShopResponse response = shopProxy.openAccount(param);
     assertThat("shop open " + response.getRetmsg() + response.getException(),
-            response.getRetcode(), equalTo(0));
+        response.getRetcode(), equalTo(0));
   }
+
   @Test
-  public void openUserAccount(){
+  public void openUserAccount() {
 
     ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
     helper.login(appid, secret);
     ApiVersionResponse version = apiCommonProxy.apiVersion();
 
     assertThat("get version error " + version.getException(),
-            version.getVersion(), notNullValue());
+        version.getVersion(), notNullValue());
     OpenUserParam param = new OpenUserParam();
     param.setUid("testuid1");
     param.setIdtype("student_idcard");
@@ -119,17 +121,17 @@
     System.out.println(param.getSign());
     UserResponse response = userProxy.openAccount(param);
     assertThat("user open " + response.getRetmsg() + response.getException(),
-            response.getRetcode(), equalTo(0));
+        response.getRetcode(), equalTo(0));
   }
 
   @Test
-  public void qrcodeInit(){
+  public void qrcodeInit() {
     ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
     helper.login(appid, secret);
     ApiVersionResponse version = apiCommonProxy.apiVersion();
 
     assertThat("get version error " + version.getException(),
-            version.getVersion(), notNullValue());
+        version.getVersion(), notNullValue());
 
     QrcodePayParam param = new QrcodePayParam();
     param.setAmount(1);
@@ -143,17 +145,17 @@
     param.setQrcode("286972142340737770");
     QrcodePayResponse response = consumePropxy.qrcodePayInit(param);
     assertThat("qrcodeInit " + response.getRetmsg() + response.getException(),
-            response.getRetcode(), equalTo(0));
+        response.getRetcode(), equalTo(0));
   }
 
   @Test
-  public void qrcodePay(){
+  public void qrcodePay() {
     ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
     helper.login(appid, secret);
     ApiVersionResponse version = apiCommonProxy.apiVersion();
 
     assertThat("get version error " + version.getException(),
-            version.getVersion(), notNullValue());
+        version.getVersion(), notNullValue());
 
     QrcodePayParam param = new QrcodePayParam();
     param.setAmount(1);
@@ -170,14 +172,15 @@
     param.setSpip("172.28.43.3");
     QrcodePayResponse response = consumePropxy.qrcodePayInit(param);
     assertThat("qrcodeInit " + response.getRetmsg() + response.getException(),
-            response.getRetcode(), equalTo(0));
+        response.getRetcode(), equalTo(0));
 
     response = consumePropxy.qrcodePayConfirm(param);
-    assertThat("qrcodeConfirm:" + response.getRetmsg() + response.getException()+",query="+response.isRequireQuery(),
-            response.getRetcode(), equalTo(0));
+    assertThat("qrcodeConfirm:" + response.getRetmsg() + response.getException() + ",query=" + response.isRequireQuery(),
+        response.getRetcode(), equalTo(0));
   }
+
   @Test
-  public void qrcodeQuery(){
+  public void qrcodeQuery() {
     ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
     helper.login(appid, secret);
     DoorQRCodeParam param = new DoorQRCodeParam();
@@ -185,10 +188,11 @@
 
     DoorQrcodeResponse response = consumePropxy.qrcodequery(param);
     assertThat("qrcode query " + response.getRetmsg() + response.getException(),
-            response.getRetcode(), equalTo(0));
+        response.getRetcode(), equalTo(0));
   }
+
   @Test
-  public void queryUser(){
+  public void queryUser() {
     ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
     helper.login(appid, secret);
     QueryUserParam param = new QueryUserParam();
@@ -196,20 +200,20 @@
 
     UserInforResponse response = userProxy.querybycardno(param);
     assertThat("user query " + response.getRetmsg() + response.getException(),
-            response.getRetcode(), equalTo(0));
+        response.getRetcode(), equalTo(0));
   }
 
   @Test
-  public void testmsg(){
+  public void testmsg() {
     ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
     helper.login(appid, secret);
     ApiResponse response = userProxy.testmsg();
     assertThat("test msg " + response.getRetmsg() + response.getException(),
-            response.getRetcode(), equalTo(0));
+        response.getRetcode(), equalTo(0));
   }
 
   @Test
-  public void queryCards(){
+  public void queryCards() {
     ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
     helper.login(appid, secret);
     QueryCardsParam param = new QueryCardsParam();
@@ -217,17 +221,17 @@
     param.setEndtime("20190826100001");
 
     CardsResponse response = userProxy.querycards(param);
-    List<LinkedHashMap> cards = response.getCards();
-    for(LinkedHashMap card:cards){
-      assertThat("user card " + card.get("cardno")+","+card.get("cardpyhid"),
-              response.getRetcode(), equalTo(0));
+    List<CitizenCardInfo> cards = response.getCards();
+    for (CitizenCardInfo card : cards) {
+      assertThat("user card " + card.getCardno() + "," + card.getCardphyid(),
+          response.getRetcode(), equalTo(0));
     }
     assertThat("user query " + response.getRetmsg() + response.getException(),
-            response.getRetcode(), equalTo(0));
+        response.getRetcode(), equalTo(0));
   }
 
   @Test
-  public void thirdpay(){
+  public void thirdpay() {
 
   }
 
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt
index b40489b..1190337 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt
@@ -131,21 +131,23 @@
             }
 
             val interval = DateUtil.getIntervalDay(status.checkAccdate, accdate).toInt()
-            if (interval > sourcetype.tplusN) {
-                if (!status.settleStatus) {
-                    //未结算过，继续
-                    return status
+            when {
+                interval > sourcetype.tplusN -> {
+                    if (!status.settleStatus) {
+                        //未结算过，继续
+                        return status
+                    }
+                    return null
                 }
-                return null
-            } else if (interval == sourcetype.tplusN) {
-                //对最后一天的账(比如：T+1对昨天的帐，需判断可以对账的起始时间)
-                if (!status.settleStatus && canStartCheck(sourcetype)) {
-                    return status
+                interval == sourcetype.tplusN -> {
+                    //对最后一天的账(比如：T+1对昨天的帐，需判断可以对账的起始时间)
+                    if (!status.settleStatus && canStartCheck(sourcetype)) {
+                        return status
+                    }
+                    return null
                 }
-                return null
-            } else {
-                // 其它条件不对账
-                return null
+                else -> // 其它条件不对账
+                    return null
             }
 
         } catch (ex: Exception) {
