diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 8e2b45e..7c2ec22 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -31,4 +31,16 @@
 #############################################
 spring.cloud.consul.enabled=false
 spring.cloud.consul.host=172.28.201.70
-spring.cloud.consul.port=8500
\ No newline at end of file
+spring.cloud.consul.port=8500
+
+#============== kafka ===================
+# 指定kafka 代理地址，可以多个
+# spring.kafka.bootstrap-servers=192.168.153.135:9092
+#=============== provider  =======================
+spring.kafka.producer.retries=3
+# 每次批量发送消息的数量
+spring.kafka.producer.batch-size=16384
+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
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryUserParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryUserParam.java
index 55a5dcf..0a2b994 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryUserParam.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryUserParam.java
@@ -15,10 +15,14 @@
   private String userid;
   @Sign
   private String uid;
+  @Sign
+  private String citizencardno;
+  @Sign
+  private String bankcardno;
 
   @Override
   public boolean checkParam() throws RequestParamCheckException {
-    if (StringUtils.isEmpty(userid) && StringUtils.isEmpty(uid)) {
+    if (StringUtils.isEmpty(userid) && StringUtils.isEmpty(uid)&& StringUtils.isEmpty(citizencardno)&& StringUtils.isEmpty(bankcardno)) {
       throw new 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
new file mode 100644
index 0000000..b544f0e
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserInforResponse.java
@@ -0,0 +1,20 @@
+package com.supwisdom.dlpay.api.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserInforResponse extends ApiResponse {
+  private String userid;
+  private String cardno;
+  private String cardstatus;
+  private String transstatus;
+  private String expiredate;
+  private String name;
+  private String status;
+}
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 ddcf198..a75f4c8 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
@@ -1,10 +1,8 @@
 package com.supwisdom.dlpay.paysdk.proxy;
 
-import com.supwisdom.dlpay.api.bean.ModifyUserParam;
-import com.supwisdom.dlpay.api.bean.OpenUserParam;
-import com.supwisdom.dlpay.api.bean.QueryUserParam;
-import com.supwisdom.dlpay.api.bean.UserResponse;
+import com.supwisdom.dlpay.api.bean.*;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
@@ -18,4 +16,7 @@
 
   @PostMapping("/api/user/modify")
   UserResponse modifyAccount(@RequestBody ModifyUserParam param);
+
+  @PostMapping("/api/user/querybycardno")
+  UserInforResponse querybycardno(@RequestBody QueryUserParam 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 8229dcf..d5984ea 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
@@ -184,6 +184,17 @@
     assertThat("qrcode query " + response.getRetmsg() + response.getException(),
             response.getRetcode(), equalTo(0));
   }
+  @Test
+  public void queryUser(){
+    ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
+    helper.login(appid, secret);
+    QueryUserParam param = new QueryUserParam();
+    param.setCitizencardno("123456");
+
+    UserInforResponse response = userProxy.querybycardno(param);
+    assertThat("user query " + response.getRetmsg() + response.getException(),
+            response.getRetcode(), equalTo(0));
+  }
 
   @Test
   public void thirdpay(){
diff --git a/payapi/build.gradle b/payapi/build.gradle
index d5c3abf..face7fa 100644
--- a/payapi/build.gradle
+++ b/payapi/build.gradle
@@ -1,3 +1,5 @@
+import java.text.SimpleDateFormat
+
 plugins {
     id 'java'
     id 'org.springframework.boot'
@@ -24,7 +26,7 @@
 bootJar {
     mainClassName = payapiStartClass
     manifest {
-        attributes('Payapi-Version': payapiVersion)
+        attributes('Payapi-Version': payapiVersion,'Payapi-Buildtime':new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").format(new Date()))
     }
 }
 
@@ -71,7 +73,7 @@
     implementation 'org.springframework.cloud:spring-cloud-starter-consul-discovery:2.1.2.RELEASE'
 
     implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
-
+    implementation: 'org.springframework.kafka:spring-kafka:2.2.8.RELEASE'
     runtime("org.springframework.boot:spring-boot-devtools")
 
     implementation 'org.postgresql:postgresql:42.2.5'
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 551b7c6..3c4500e 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
@@ -4,17 +4,16 @@
 import com.supwisdom.dlpay.api.bean.OpenUserParam
 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.UserService
 import com.supwisdom.dlpay.exception.TransactionException
+import com.supwisdom.dlpay.exception.TransactionProcessException
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
 import com.supwisdom.dlpay.framework.service.CommonService
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
-import org.springframework.web.bind.annotation.PostMapping
-import org.springframework.web.bind.annotation.RequestBody
-import org.springframework.web.bind.annotation.RequestMapping
-import org.springframework.web.bind.annotation.RestController
+import org.springframework.web.bind.annotation.*
 import java.net.URLDecoder
 import javax.servlet.http.HttpServletRequest
 import javax.servlet.http.HttpServletResponse
@@ -24,6 +23,8 @@
 class UserAPIController {
     @Autowired
     private lateinit var useService: UserService
+    @Autowired
+    private lateinit var cardService: CardService
 
     @PostMapping("/open")
     fun openAccount(@RequestBody param: OpenUserParam): ResponseEntity<Any> {
@@ -121,6 +122,15 @@
                     .transException(et, "业务处理错误"))
         }
     }
-
-
+    @PostMapping("/querybycardno")
+    fun querybycardno(@RequestBody param: QueryUserParam): ResponseEntity<Any> {
+        val ret = cardService.getPersonByCardno(param.citizencardno, param.bankcardno)
+        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 4b09146..a25562a 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,7 +1,9 @@
 package com.supwisdom.dlpay.api.service
 
+import com.supwisdom.dlpay.api.bean.UserInforResponse
 import com.supwisdom.dlpay.api.domain.TCard
 import com.supwisdom.dlpay.api.domain.TPerson
+import com.supwisdom.dlpay.framework.ResponseBodyBuilder
 import org.springframework.transaction.annotation.Transactional
 
 interface CardService {
@@ -11,5 +13,7 @@
     @Transactional(rollbackFor = arrayOf(Exception::class), readOnly = true)
     fun getPersonByCitizencard(cardno: String, ignoreStatus: Boolean? = false): TPerson
 
+    @Transactional(rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun getPersonByCardno(citizencardno: String?, bankcardno:String?): UserInforResponse
 
 }
\ 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 5a26d56..a9bcb82 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,11 +1,13 @@
 package com.supwisdom.dlpay.api.service.impl
 
+import com.supwisdom.dlpay.api.bean.UserInforResponse
 import com.supwisdom.dlpay.api.dao.CardDao
 import com.supwisdom.dlpay.api.dao.PersonDao
 import com.supwisdom.dlpay.api.domain.TCard
 import com.supwisdom.dlpay.api.domain.TPerson
 import com.supwisdom.dlpay.api.service.CardService
 import com.supwisdom.dlpay.exception.TransactionProcessException
+import com.supwisdom.dlpay.framework.ResponseBodyBuilder
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
 import com.supwisdom.dlpay.util.ConstantUtil
@@ -40,4 +42,43 @@
         return personDao.findByUserid(cityCard.userid)
                 ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "市民卡[$cardno]用户信息不存在！")
     }
+
+    override fun getPersonByCardno(citizencardno: String?, bankcardno: String?): UserInforResponse {
+        var resp = UserInforResponse()
+        var cityCard:TCard
+        if (!citizencardno.isNullOrEmpty()) {
+            cityCard = cardDao.findCardByCardnoAndCardtype(citizencardno, ConstantUtil.CARDTYPE_CITIZENCARD)
+            if(cityCard==null){
+                resp.retcode=1
+                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
+            }
+        } else {
+            resp.retcode=1
+            resp.retmsg = "参数错误"
+            return resp
+        }
+        resp.cardno = cityCard.cardno
+        resp.cardstatus = cityCard.status
+        resp.transstatus = cityCard.transStatus
+        resp.expiredate = cityCard.expiredate
+        val person = personDao.findByUserid(cityCard.userid)
+        if (person != null) {
+            resp.retcode=0
+            resp.name = person.name
+            resp.userid = person.userid
+            resp.status = person.status
+            return resp
+        }
+        resp.retcode=1
+        resp.retmsg = "用户不存在"
+        return resp
+    }
 }
\ No newline at end of file
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
new file mode 100644
index 0000000..9322b68
--- /dev/null
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/kafka_service.kt
@@ -0,0 +1,16 @@
+package com.supwisdom.dlpay.api.service
+
+import org.springframework.stereotype.Component
+import org.springframework.kafka.core.KafkaTemplate
+import org.springframework.beans.factory.annotation.Autowired
+
+
+
+@Component
+class KafkaSendMsgService{
+    @Autowired
+    private lateinit var kafkaTemplate: KafkaTemplate<String, String>
+    fun sendMessage(topic:String,msg: String) {
+        kafkaTemplate.send(topic, msg)
+    }
+}
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/service/impl/framework_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/service/impl/framework_service_impl.kt
index d5a13dd..38f1499 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/service/impl/framework_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/service/impl/framework_service_impl.kt
@@ -30,9 +30,11 @@
 
     override fun getSystemVersion(): String {
         return try {
-            Manifests.read("Payapi-Version") ?: "version 1.0"
+            var ver =  Manifests.read("Payapi-Version") ?: "version 1.0"
+            ver += Manifests.read("Payapi-Buildtime") ?: "no"
+            ver
         } catch (ex: Exception) {
-//            ex.printStackTrace()
+            ex.printStackTrace()
             "unknown"
         }
     }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt
index 882695e..b8ea4fc 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt
@@ -42,7 +42,6 @@
     @Autowired
     lateinit var userService: UserService
 
-
     override fun onAuthenticationSuccess(request: HttpServletRequest, response: HttpServletResponse, authentication: Authentication) {
         logger.error(request.getParameter("platform"))
         val temp = authentication.principal as TBMobileUser
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 bd49910..9d78020 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
@@ -18,6 +18,7 @@
 import com.supwisdom.dlpay.system.service.DictionaryProxy
 import com.supwisdom.dlpay.util.ConstantUtil
 import com.supwisdom.dlpay.util.RSAKeysGenerate
+import mu.KotlinLogging
 import org.apache.commons.lang.StringUtils
 import org.jose4j.jwt.ReservedClaimNames
 import org.springframework.beans.factory.annotation.Autowired
@@ -49,6 +50,7 @@
     lateinit var apiJwtRepository: ApiJwtRepository
     @Autowired
     lateinit var systemUtilService: SystemUtilService
+    val logger = KotlinLogging.logger { }
 
     @RequestMapping("/time")
     fun time(): JsonResult {
@@ -95,7 +97,8 @@
         val temp = redisTemplate.opsForValue().get(phone)
         if (temp.isNullOrEmpty()) {
             val code = RandomUtils.randomNumber(6)
-            System.out.println(code)
+            logger.error { code }
+            //TODO 先发送成功，再放入redis
             redisTemplate.opsForValue().set(phone, code, Duration.ofMinutes(5))
             val rs = mobileApiService.sendSms(phone, code)
             if ("0" != rs.retcode) {
@@ -247,6 +250,7 @@
     lateinit var jwtConfig: JwtConfig
     @Autowired
     lateinit var qrcodeService:QRCodeService
+    val logger = KotlinLogging.logger { }
 
     @RequestMapping("/idtypes")
     fun idtypes(): JsonResult {
@@ -366,13 +370,13 @@
             mobileApiService.saveCard(card)
             mobileApiService.saveUser(user)
         }
-        System.out.println(resp.captcha)
+        logger.error { resp.captcha }
         var code = if (resp.captcha.isNullOrEmpty()) {
             RandomUtils.randomNumber(6)
         } else {
             resp.captcha
         }
-        System.out.println(code)
+        logger.error { code }
         redisTemplate.opsForValue().set(user.phone, code, Duration.ofMinutes(10))
         var payseted = false
         if (!user.paypwd.isNullOrEmpty()) {
