新增卡号查询接口
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()) {