diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 408a43a..6b289c2 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -35,7 +35,7 @@
 
 #============== kafka ===================
 # 指定kafka 代理地址，可以多个
-spring.kafka.bootstrap-servers=172.28.201.101:29092
+spring.kafka.bootstrap-servers=172.28.201.101:9192
 #=============== provider  =======================
 spring.kafka.producer.retries=3
 # 每次批量发送消息的数量
@@ -43,4 +43,14 @@
 spring.kafka.producer.buffer-memory=33554432
 # 指定消息key和消息体的编解码方式
 spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
-spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
\ No newline at end of file
+spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
+
+#===============kafka consumer  =======================
+# 指定默认消费者group id
+spring.kafka.consumer.group-id=epaymessager1
+spring.kafka.consumer.auto-offset-reset=earliest
+spring.kafka.consumer.enable-auto-commit=true
+spring.kafka.consumer.auto-commit-interval=100
+# 指定消息key和消息体的编解码方式
+spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
+spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
\ No newline at end of file
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CardsResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CardsResponse.java
new file mode 100644
index 0000000..733947a
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CardsResponse.java
@@ -0,0 +1,16 @@
+package com.supwisdom.dlpay.api.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+public class CardsResponse extends ApiResponse {
+  List cards;
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryCardsParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryCardsParam.java
new file mode 100644
index 0000000..e621b78
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryCardsParam.java
@@ -0,0 +1,23 @@
+package com.supwisdom.dlpay.api.bean;
+
+import com.supwisdom.dlpay.api.APIRequestParam;
+import com.supwisdom.dlpay.api.annotation.Sign;
+import com.supwisdom.dlpay.api.exception.RequestParamCheckException;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang3.StringUtils;
+
+
+@Getter
+@Setter
+public class QueryCardsParam extends APIRequestParam {
+  @Sign
+  private String starttime;
+  @Sign
+  private String endtime;
+
+  @Override
+  public boolean checkParam() throws RequestParamCheckException {
+    return true;
+  }
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserInforResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserInforResponse.java
index 40b3019..e15252e 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserInforResponse.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserInforResponse.java
@@ -18,4 +18,10 @@
   private String name;
   private String status;
   private String cardphyid;
+
+  private String bankcardno;
+  private String bankcardstatus;
+  private String banktransstatus;
+  private String bankexpiredate;
+  private String bankcardphyid;
 }
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
index a75f4c8..4854570 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
@@ -19,4 +19,8 @@
 
   @PostMapping("/api/user/querybycardno")
   UserInforResponse querybycardno(@RequestBody QueryUserParam param);
+
+  @PostMapping("/api/user/querycards")
+  CardsResponse querycards(@RequestBody QueryCardsParam param);
+
 }
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 d5984ea..59eba97 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
@@ -20,6 +20,9 @@
 import org.springframework.http.ResponseEntity;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.util.LinkedHashMap;
+import java.util.List;
+
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.notNullValue;
@@ -197,6 +200,33 @@
   }
 
   @Test
+  public void testmsg(){
+    ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
+    helper.login(appid, secret);
+    QueryUserParam param = new QueryUserParam();
+    param.setCitizencardno("123456");
+
+  }
+
+  @Test
+  public void queryCards(){
+    ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
+    helper.login(appid, secret);
+    QueryCardsParam param = new QueryCardsParam();
+    param.setStarttime("20190724100001");
+    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));
+    }
+    assertThat("user query " + response.getRetmsg() + response.getException(),
+            response.getRetcode(), equalTo(0));
+  }
+
+  @Test
   public void thirdpay(){
 
   }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/CardDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/CardDao.java
index 3b7d7f4..f2b7290 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/CardDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/CardDao.java
@@ -5,6 +5,8 @@
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
+import java.util.List;
+
 public interface CardDao extends JpaRepository<TCard, String> {
 
   @Query("from TCard t where t.cardno=?1 and t.cardtype=?2")
@@ -16,4 +18,7 @@
 
   @Query("from TCard t where t.userid=?1 and t.cardtype=?2 and t.status='normal' ")
   TCard findCardByUseridAndCardtype(String userid, String cardtype);
+
+  @Query("from TCard t where cardtype='citizencard' and t.lastsaved>?1 and t.lastsaved<=?2 ")
+  List<TCard> findCitizencardByLastsaved(String startdate, String enddate);
 }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
index 3c4500e..3636987 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
@@ -2,9 +2,11 @@
 
 import com.supwisdom.dlpay.api.bean.ModifyUserParam
 import com.supwisdom.dlpay.api.bean.OpenUserParam
+import com.supwisdom.dlpay.api.bean.QueryCardsParam
 import com.supwisdom.dlpay.api.bean.QueryUserParam
 import com.supwisdom.dlpay.api.exception.RequestParamCheckException
 import com.supwisdom.dlpay.api.service.CardService
+import com.supwisdom.dlpay.api.service.KafkaSendMsgService
 import com.supwisdom.dlpay.api.service.UserService
 import com.supwisdom.dlpay.exception.TransactionException
 import com.supwisdom.dlpay.exception.TransactionProcessException
@@ -25,6 +27,9 @@
     private lateinit var useService: UserService
     @Autowired
     private lateinit var cardService: CardService
+    @Autowired
+    private lateinit var kafkaSendMsgService: KafkaSendMsgService
+
 
     @PostMapping("/open")
     fun openAccount(@RequestBody param: OpenUserParam): ResponseEntity<Any> {
@@ -103,11 +108,11 @@
             useService.findByUseridOrThirdUniqueIdenty(param.userid, param.uid)?.let {
                 param.name = param.name?.let { URLDecoder.decode(param.name, Charsets.UTF_8.toString()) } //解码
                 param.address = param.address?.let { URLDecoder.decode(param.address, Charsets.UTF_8.toString()) } //解码
-                if (useService.modifyUserInfo(it, param)) {
-                    return ResponseEntity.ok(ResponseBodyBuilder.create()
+                return if (useService.modifyUserInfo(it, param)) {
+                    ResponseEntity.ok(ResponseBodyBuilder.create()
                             .success("修改成功"))
                 } else {
-                    return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    ResponseEntity.ok(ResponseBodyBuilder.create()
                             .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "账户信息修改失败"))
                 }
             }
@@ -133,4 +138,16 @@
                     .fail(ret.retcode, ret.retmsg))
         }
     }
+
+    @PostMapping("/querycards")
+    fun querycards(@RequestBody param: QueryCardsParam): ResponseEntity<Any> {
+        val ret = cardService.getCardsByLastsaveDate(param.starttime, param.endtime)
+        return if(ret.retcode==0){
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .success(ret,"ok"))
+        }else{
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(ret.retcode, ret.retmsg))
+        }
+    }
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/card_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/card_service.kt
index a25562a..7540578 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/card_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/card_service.kt
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.api.service
 
+import com.supwisdom.dlpay.api.bean.CardsResponse
 import com.supwisdom.dlpay.api.bean.UserInforResponse
 import com.supwisdom.dlpay.api.domain.TCard
 import com.supwisdom.dlpay.api.domain.TPerson
@@ -16,4 +17,6 @@
     @Transactional(rollbackFor = arrayOf(Exception::class), readOnly = true)
     fun getPersonByCardno(citizencardno: String?, bankcardno:String?): UserInforResponse
 
+    @Transactional(rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun getCardsByLastsaveDate(startdate: String, enddate:String): CardsResponse
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/card_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/card_service_impl.kt
index ae74086..c43ae9d 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/card_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/card_service_impl.kt
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.api.service.impl
 
+import com.supwisdom.dlpay.api.bean.CardsResponse
 import com.supwisdom.dlpay.api.bean.UserInforResponse
 import com.supwisdom.dlpay.api.dao.CardDao
 import com.supwisdom.dlpay.api.dao.PersonDao
@@ -45,7 +46,7 @@
 
     override fun getPersonByCardno(citizencardno: String?, bankcardno: String?): UserInforResponse {
         var resp = UserInforResponse()
-        var cityCard:TCard
+        var cityCard:TCard?
         if (!citizencardno.isNullOrEmpty()) {
             cityCard = cardDao.findCardByCardnoAndCardtype(citizencardno, ConstantUtil.CARDTYPE_CITIZENCARD)
             if(cityCard==null){
@@ -53,14 +54,11 @@
                 resp.retmsg = "市民卡不存在"
                 return resp
             }
-        } else if (!bankcardno.isNullOrEmpty()) {
-            cityCard = cardDao.findCardByCardnoAndCardtype(bankcardno, ConstantUtil.CARDTYPE_BANKCARD)
-            if(cityCard==null){
-                resp.retcode=1
-                resp.retmsg = "银行卡不存在"
-                return resp
+            val bankcard = cardDao.findCardByUseridAndCardtype(cityCard.userid, ConstantUtil.CARDTYPE_BANKCARD)
+            if(bankcard!=null){
+                resp.bankcardno = bankcard.cardno
             }
-        } else {
+        }else {
             resp.retcode=1
             resp.retmsg = "参数错误"
             return resp
@@ -82,4 +80,13 @@
         resp.retmsg = "用户不存在"
         return resp
     }
+
+    override fun getCardsByLastsaveDate(startdate: String, enddate: String): CardsResponse {
+        var resp = CardsResponse()
+        var ret = cardDao.findCitizencardByLastsaved(startdate,enddate)
+        resp.retcode=0
+        resp.retmsg="OK"
+        resp.cards = ret
+        return resp
+    }
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/kafka_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/kafka_service_impl.kt
new file mode 100644
index 0000000..1d75fd3
--- /dev/null
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/kafka_service_impl.kt
@@ -0,0 +1,77 @@
+package com.supwisdom.dlpay.api.service.impl
+
+import com.google.gson.Gson
+import com.supwisdom.dlpay.api.bean.KafkaXgMessage
+import com.supwisdom.dlpay.api.service.KafkaSendMsgService
+import com.supwisdom.dlpay.framework.util.DateUtil
+import com.supwisdom.dlpay.framework.util.TradeDict
+import com.supwisdom.dlpay.mobile.dao.MsgDao
+import com.supwisdom.dlpay.mobile.domain.TBMsg
+import com.supwisdom.dlpay.mobile.service.MobileApiService
+import mu.KotlinLogging
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.kafka.core.KafkaTemplate
+import org.springframework.scheduling.annotation.Async
+import org.springframework.stereotype.Service
+
+@Service
+class KafkaSendMsgServiceImpl:KafkaSendMsgService{
+    val logger = KotlinLogging.logger { }
+    @Autowired
+    private lateinit var kafkaTemplate: KafkaTemplate<String, String>
+    @Autowired
+    private lateinit var msgDao: MsgDao
+    @Autowired
+    private lateinit var mobileApiService: MobileApiService
+    val gson = Gson()
+
+    val topic = "jpush-messages"
+
+    @Async
+    override fun sendJpushMessage(userid: String, title: String, content: String, refno: String, extras: MutableMap<String, String>, tenantId: String?) {
+        val musers = mobileApiService.findByUseridAndStatus(userid, TradeDict.STATUS_NORMAL)
+        var msg = TBMsg().apply {
+            this.content = content
+            this.title = title
+            this.refno = refno
+            this.userid = userid
+            this.lastupdate = DateUtil.getNow()
+            this.refno = refno
+            this.extras = gson.toJson(extras)
+        }
+        if (musers == null || musers.isEmpty()) {
+            msg.pushresult = "没有手机用户，消息未推送"
+            msgDao.save(msg)
+            return
+        }
+        var uids = ""
+        musers.forEach {
+            uids += "${it.uid},"
+            var platform = "android"
+            if ("ios".equals(it.lastloginplatform, true)) {
+                platform = "ios"
+            }
+            val message = KafkaXgMessage()
+            message.alltarget = false
+            message.callback = true
+            message.content = msg.content
+            message.title = msg.title
+            message.platform = platform
+            message.retries = 3
+            extras["refno"] = refno
+            message.custom = gson.toJson(extras)
+            message.expiretime = DateUtil.getNewTime(DateUtil.getNow(), 300)
+            message.gids = it.uid
+            if(it.lastloginplatform.isNullOrEmpty()){
+                message.platform="ios"
+                kafkaTemplate.send(topic, refno, gson.toJson(message))
+                message.platform="android"
+                kafkaTemplate.send(topic, refno, gson.toJson(message))
+            }else{
+                kafkaTemplate.send(topic, refno, gson.toJson(message))
+            }
+        }
+        msg.pusheduids = uids
+        msgDao.save(msg)
+    }
+}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/kafka_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/kafka_service.kt
index d9bd0a8..96a01e1 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/kafka_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/kafka_service.kt
@@ -1,70 +1,31 @@
 package com.supwisdom.dlpay.api.service
 
-import com.google.gson.Gson
-import com.supwisdom.dlpay.api.bean.KafkaXgMessage
-import com.supwisdom.dlpay.framework.util.DateUtil
-import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.mobile.dao.MsgDao
-import com.supwisdom.dlpay.mobile.domain.TBMsg
-import com.supwisdom.dlpay.mobile.service.MobileApiService
 import mu.KotlinLogging
+import org.apache.kafka.clients.consumer.ConsumerRecord
 import org.springframework.stereotype.Component
-import org.springframework.kafka.core.KafkaTemplate
 import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.scheduling.annotation.Async
+import org.springframework.kafka.annotation.KafkaListener
 
-
+interface KafkaSendMsgService {
+    fun sendJpushMessage(userid: String, title: String, content: String, refno: String, extras: MutableMap<String, String>, tenantId: String?)
+}
 @Component
-class KafkaSendMsgService {
+class  KafkaMsgListener{
     val logger = KotlinLogging.logger { }
     @Autowired
-    private lateinit var kafkaTemplate: KafkaTemplate<String, String>
-    @Autowired
     private lateinit var msgDao: MsgDao
-    @Autowired
-    private lateinit var mobileApiService: MobileApiService
-    val gson = Gson()
 
-    val topic = "jpush-messages"
-
-    @Async("kafkaSendMsgService")
-    fun sendJpushMessage(userid: String, title: String, content: String, refno: String, extras: MutableMap<String, String>, tenantId: String?) {
-        val musers = mobileApiService.findByUseridAndStatus(userid, TradeDict.STATUS_NORMAL)
-        var msg = TBMsg().apply {
-            this.content = content
-            this.title = title
-            this.refno = refno
-            this.userid = userid
-            this.lastupdate = DateUtil.getNow()
-            this.refno = refno
-            this.extras = gson.toJson(extras)
-        }
-        if (musers == null || musers.isEmpty()) {
-            msg.pushresult = "没有手机用户，消息未推送"
-            msgDao.save(msg)
-            return
-        }
-        var uids = ""
-        musers.forEach {
-            uids += "${it.uid},"
-            var platform = "android"
-            if ("ios".equals(it.lastloginplatform, true)) {
-                platform = "ios"
+    @KafkaListener(topics = ["jpush-messages-result"])
+    fun listen(record :ConsumerRecord<String, String>) {
+        logger.debug { "${record.key()},${record.value()}" }
+        if(!record.key().isNullOrEmpty()){
+           val opt =  msgDao.findById(record.key())
+            if(opt.isPresent){
+                var msg = opt.get()
+                msg.pushresult = record.value()
+                msgDao.save(msg)
             }
-            val message = KafkaXgMessage()
-            message.alltarget = false
-            message.callback = true
-            message.content = msg.content
-            message.title = msg.title
-            message.platform = platform
-            message.retries = 3
-            extras["refno"] = refno
-            message.custom = gson.toJson(extras)
-            message.expiretime = DateUtil.getNewTime(DateUtil.getNow(), 300)
-            message.gids = it.uid
-            kafkaTemplate.send(topic, refno, gson.toJson(message))
         }
-        msg.pusheduids = uids
-        msgDao.save(msg)
     }
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
index 824ebc1..22ece91 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
@@ -283,6 +283,7 @@
                 ?: return JsonResult.error("用户不存在，请注册")
         return JsonResult.ok("OK").put("now", System.currentTimeMillis())
                 ?.put("version","1")
+                ?.put("versionmsg","1")
                 ?.put("minversion","1")!!
     }
 
diff --git a/payapi/src/test/kotlin/com/supwisdom/dlpay/DlpayApplicationTests.kt b/payapi/src/test/kotlin/com/supwisdom/dlpay/DlpayApplicationTests.kt
index c8b875f..9e7bd63 100644
--- a/payapi/src/test/kotlin/com/supwisdom/dlpay/DlpayApplicationTests.kt
+++ b/payapi/src/test/kotlin/com/supwisdom/dlpay/DlpayApplicationTests.kt
@@ -1,11 +1,22 @@
 package com.supwisdom.dlpay
 
+import com.supwisdom.dlpay.api.service.KafkaSendMsgService
+import org.junit.Test
 import org.junit.runner.RunWith
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration
 import org.springframework.boot.test.context.SpringBootTest
 import org.springframework.test.context.junit4.SpringRunner
 
 @RunWith(SpringRunner::class)
 @SpringBootTest
-abstract class DlpayApplicationTests{
+@EnableAutoConfiguration
+class DlpayApplicationTests{
+    @Autowired
+    private lateinit var kafkaSendMsgService: KafkaSendMsgService
 
+    @Test
+    fun kafkaSendMsg(){
+        kafkaSendMsgService.sendJpushMessage("402882816be4b6b9016be4b78ab30001","交易提醒","你有一笔0.01元的支出，点击查看详情","20190725112512000017", mutableMapOf(),"")
+    }
 }
diff --git a/payapi/src/test/kotlin/com/supwisdom/dlpay/MvcBaseTest.kt b/payapi/src/test/kotlin/com/supwisdom/dlpay/MvcBaseTest.kt
index 62a56a3..91bd2e1 100644
--- a/payapi/src/test/kotlin/com/supwisdom/dlpay/MvcBaseTest.kt
+++ b/payapi/src/test/kotlin/com/supwisdom/dlpay/MvcBaseTest.kt
@@ -5,6 +5,8 @@
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc
 import org.springframework.boot.test.context.SpringBootTest
+import org.springframework.test.context.ActiveProfiles
+import org.springframework.test.context.TestPropertySource
 import org.springframework.test.context.junit4.SpringRunner
 import org.springframework.test.web.servlet.MockMvc
 
diff --git a/payapi/src/test/kotlin/com/supwisdom/dlpay/controller/ApiControllerTest.kt b/payapi/src/test/kotlin/com/supwisdom/dlpay/controller/ApiControllerTest.kt
index 0899c9a..01d6e50 100644
--- a/payapi/src/test/kotlin/com/supwisdom/dlpay/controller/ApiControllerTest.kt
+++ b/payapi/src/test/kotlin/com/supwisdom/dlpay/controller/ApiControllerTest.kt
@@ -1,7 +1,9 @@
 package com.supwisdom.dlpay.controller
 
 import com.supwisdom.dlpay.MvcBaseTest
+import com.supwisdom.dlpay.api.service.KafkaSendMsgService
 import org.junit.Test
+import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.MediaType
 import org.springframework.test.web.servlet.request.MockMvcRequestBuilders
 import org.springframework.test.web.servlet.result.MockMvcResultHandlers
@@ -11,6 +13,7 @@
  * Created by shuwei on 2019/4/16.
  */
 class ApiControllerTest : MvcBaseTest() {
+
     @Test
     fun testYktPay() {
         //TODO prepare data
@@ -21,4 +24,5 @@
                 .andDo(MockMvcResultHandlers.print())
                 .andReturn()
     }
+
 }
\ No newline at end of file
