diff --git a/config/application-devel-pg-xkx.properties b/config/application-devel-pg-xkx.properties
index 3f78169..16830f5 100644
--- a/config/application-devel-pg-xkx.properties
+++ b/config/application-devel-pg-xkx.properties
@@ -8,15 +8,16 @@
 # Postgresql settings
 spring.datasource.platform=postgresql
 spring.datasource.url=jdbc:postgresql://localhost:15432/payapi
-spring.datasource.username=admin
+spring.datasource.username=supwisdom
 spring.datasource.password=123456
 database.dbtype=postgresql
 
 logging.level.org.hibernate.SQL=ERROR
 # Redis settings
 spring.redis.host=localhost
-spring.redis.port=16379
-spring.redis.password=kingstar
+spring.redis.port=6379
+spring.redis.password=
+spring.redis.database=0
 # jwt settings
 jwt.secret=Zj5taLomEbrM0lk+NMQZbHfSxaDU1wekjT+kiC3YzDw=
 # timeout seconds
@@ -24,14 +25,26 @@
 # user password
 auth.password.bcrypt.seed=
 security.request.sign=false
-##################################################
+###################### dev ############################
 ## quartz task scheduler
 shopbalance.updater.cron=-
+download.ynrcc.chkfile.cron =-
+query.third.transdtl.result.cron=-
+dayend.settletask.cron=-
+payapi.sourcetype.checker.scheduler=-
+citizencard.dolosstask.cron=-
+send.delay.notice.task.cron=-
+points.outdate.cron=-
+points.consume.cron=-
+##################################################
 #download.ynrcc.chkfile.cron =3 0/2 * * * ?
 #query.third.transdtl.result.cron=7 0/1 * * * ?
 #dayend.settletask.cron=0 0/2 * * * ?
 #payapi.sourcetype.checker.scheduler=0 0/2 * * * ?
-citizencard.dolosstask.cron=3 0/1 * * * ?
+#citizencard.dolosstask.cron=3 0/1 * * * ?
+#send.delay.notice.task.cron=29 0/1 * * * ?
+#points.outdate.cron=0 0 0 * * ?
+#points.consume.cron=0 0 0 * * ?
 #############################################
 spring.cloud.consul.enabled=false
 spring.cloud.consul.host=172.28.201.70
@@ -42,24 +55,24 @@
 resttemplate.proxy.port=8087
 
 #============== kafka ===================
-# 指定kafka 代理地址，可以多个
+# \u6307\u5B9Akafka \u4EE3\u7406\u5730\u5740\uFF0C\u53EF\u4EE5\u591A\u4E2A
 #spring.kafka.bootstrap-servers=172.28.201.101:9192
 #=============== provider  =======================
 spring.kafka.producer.retries=3
-# 每次批量发送消息的数量
+# \u6BCF\u6B21\u6279\u91CF\u53D1\u9001\u6D88\u606F\u7684\u6570\u91CF
 spring.kafka.producer.batch-size=16384
 spring.kafka.producer.buffer-memory=33554432
-# 指定消息key和消息体的编解码方式
+# \u6307\u5B9A\u6D88\u606Fkey\u548C\u6D88\u606F\u4F53\u7684\u7F16\u89E3\u7801\u65B9\u5F0F
 spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
 spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
 
 #===============kafka consumer  =======================
 spring.kafka.listen.auto.start=false
-# 指定默认消费者group id
+# \u6307\u5B9A\u9ED8\u8BA4\u6D88\u8D39\u8005group 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和消息体的编解码方式
+# \u6307\u5B9A\u6D88\u606Fkey\u548C\u6D88\u606F\u4F53\u7684\u7F16\u89E3\u7801\u65B9\u5F0F
 spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
 spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
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 ac510c5..329c29e 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
@@ -75,4 +75,7 @@
 
   @PostMapping("/api/user/consumetask")
   ApiResponse consumeTask(@RequestParam("userid") String userid);
+
+  @PostMapping("/api/user/queryCitizenCard")
+  DoorQrcodeResponse queryCitizenCard(@RequestParam("uid") String uid);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
index e493e5e..5a661b6 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
@@ -313,7 +313,7 @@
       if (!StringUtil.isEmpty(cardList)) throw new WebCheckException("物理卡号已经存在！");
 
       TPerson person = personDao.findByIdentity(idtype.trim(), idno.trim());
-      if (null != person && username.trim().equals(person.getName()))
+      if (null != person && !username.trim().equals(person.getName()))
         throw new WebCheckException("证件号对应的用户已经存在，且姓名不匹配！");
 
       SystemDateTime dt = systemUtilService.getSysdatetime();
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 da943d3..b794c2a 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
@@ -427,4 +427,19 @@
                     .fail(400,"未完成首次消费任务"))
         }
     }
+
+    /**
+     * 根据手机用户uid查询市民卡信息
+     * */
+    @PostMapping("/queryCitizenCard")
+    fun queryCitizenCard(uid: String): ResponseEntity<Any> {
+        val ret = mobileApiService.findCardInfoByMobileUid(uid)
+        return if (ret.retcode == 0) {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .success(ret, "成功"))
+        } else {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(ret.retcode, ret.retmsg))
+        }
+    }
 }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/MobileApiService.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/MobileApiService.kt
index 600f469..3d029aa 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/MobileApiService.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/MobileApiService.kt
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.mobile.service
 
 import com.supwisdom.dlpay.api.bean.BaseResp
+import com.supwisdom.dlpay.api.bean.DoorQrcodeResponse
 import com.supwisdom.dlpay.api.bean.SignBxyParam
 import com.supwisdom.dlpay.api.domain.TCard
 import com.supwisdom.dlpay.api.domain.TUserSecret
@@ -33,4 +34,6 @@
     fun findCardByUseridAndCardphyid(userid: String, cardtype: String, cardphyid: String?): TCard?
 
     fun findUserSecretByUid(uid:String):TUserSecret?
+
+    fun findCardInfoByMobileUid(uid: String): DoorQrcodeResponse
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileApiServiceImpl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileApiServiceImpl.kt
index e5e6ec6..de74d84 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileApiServiceImpl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/service/impl/MobileApiServiceImpl.kt
@@ -2,8 +2,10 @@
 
 import com.mascloud.sdkclient.Client
 import com.supwisdom.dlpay.api.bean.BaseResp
+import com.supwisdom.dlpay.api.bean.DoorQrcodeResponse
 import com.supwisdom.dlpay.api.bean.SignBxyParam
 import com.supwisdom.dlpay.api.dao.CardDao
+import com.supwisdom.dlpay.api.dao.PersonDao
 import com.supwisdom.dlpay.api.dao.UserSecretDao
 import com.supwisdom.dlpay.api.domain.TCard
 import com.supwisdom.dlpay.api.domain.TUserSecret
@@ -29,6 +31,9 @@
     lateinit var cardDao: CardDao
 
     @Autowired
+    lateinit var personDao: PersonDao
+
+    @Autowired
     lateinit var pagesDao: PagesDao
 
     @Autowired
@@ -213,4 +218,49 @@
     override fun findUserSecretByUid(uid: String): TUserSecret? {
         return userSecretDao.getByUid(uid)
     }
+
+    override fun findCardInfoByMobileUid(uid: String): DoorQrcodeResponse {
+        val resp = DoorQrcodeResponse()
+        val mobileUser = userSecretDao.getByUid(uid)
+        if (null == mobileUser) {
+            resp.retcode = 1
+            resp.retmsg = "用户不存在！"
+            return resp
+        }
+        val person = personDao.findByUserid(mobileUser.userid)
+        if (null == person) {
+            resp.retcode = 1
+            resp.retmsg = "用户不存在！"
+            return resp
+        }
+        val bankCard = cardDao.findCardByUseridAndCardtype(person.userid, ConstantUtil.CARDTYPE_BANKCARD)
+        if (null == bankCard) {
+            resp.retcode = 1
+            resp.retmsg = "用户未绑定银行卡！"
+            return resp
+        }
+        val cityCard = cardDao.findBankcardByCitizencard(bankCard.userid, ConstantUtil.CARDTYPE_CITIZENCARD, bankCard.cardphyid)
+        if (null == cityCard) {
+            resp.retcode = 1
+            resp.retmsg = "用户市民卡信息错误！"
+            return resp
+        }
+
+        resp.retcode = 0
+        resp.retmsg = "OK"
+        resp.userid = person.userid
+        resp.username = person.name
+        resp.sex = person.sex
+        resp.idtype = person.idtype
+        resp.idno = person.idno
+        resp.phone = person.mobile
+
+        resp.citycardno = cityCard.cardno
+        resp.cardphyid = cityCard.cardphyid
+        resp.expiredate = cityCard.expiredate
+        resp.cardstatus = cityCard.status
+        resp.transstatus = cityCard.transStatus
+        resp.bankcardno = bankCard.cardno
+        return resp
+    }
 }
\ No newline at end of file
