diff --git a/backend/src/main/java/com/supwisdom/dlpay/framework/util/DataUtil.java b/backend/src/main/java/com/supwisdom/dlpay/framework/util/DataUtil.java
new file mode 100644
index 0000000..5d8546c
--- /dev/null
+++ b/backend/src/main/java/com/supwisdom/dlpay/framework/util/DataUtil.java
@@ -0,0 +1,24 @@
+package com.supwisdom.dlpay.framework.util;
+
+public class DataUtil {
+  public static String desensitization(String str, int start, int end) {
+    if (StringUtil.isEmpty(str)) {
+      return "";
+    }
+    int length = str.length();
+    if (start + end >= length || end > length) {
+      return "";
+    }
+    String prefix = str.substring(0, start);
+    String suffix = str.substring(length - end - 1, length - 1);
+    return prefix + repeat("*", length - start - end) + suffix;
+  }
+
+  public static String repeat(String str, int length) {
+    StringBuilder sb = new StringBuilder(str);
+    for (int i = 0; i < length - 1; i++) {
+      sb.append(str);
+    }
+    return sb.toString();
+  }
+}
diff --git a/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBOutlets.java b/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBOutlets.java
new file mode 100644
index 0000000..a459cc8
--- /dev/null
+++ b/backend/src/main/java/com/supwisdom/dlpay/portal/domain/TBOutlets.java
@@ -0,0 +1,115 @@
+package com.supwisdom.dlpay.portal.domain;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "tb_outlets",
+    indexes = {@Index(name = "outlets_idx1", columnList = "outlesno"),
+        @Index(name = "outlets_idx2", columnList = "name"),
+        @Index(name = "outlets_idx3", columnList = "address")})
+public class TBOutlets {
+  @Id
+  @GenericGenerator(name = "idGenerator", strategy = "uuid")
+  @GeneratedValue(generator = "idGenerator")
+  @Column(name = "id", nullable = false, length = 32)
+  private String id;
+
+  @Column(name = "outlesno")
+  private String outlesno;
+
+  @Column(name = "name",length = 100)
+  private String name;
+
+  @Column(name = "address", length = 200)
+  private String address;
+
+  @Column(name = "starttime", length = 6)
+  private String starttime;
+
+  @Column(name = "endtime", length = 6)
+  private String endtime;
+
+  @Column(name = "location",length = 20)
+  private String location;
+
+
+  @Column(name = "businescope", length = 100)
+  private String businescope;
+
+  @Column(name = "tel",length = 50)
+  private String tel;
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getOutlesno() {
+    return outlesno;
+  }
+
+  public void setOutlesno(String outlesno) {
+    this.outlesno = outlesno;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    this.name = name;
+  }
+
+  public String getAddress() {
+    return address;
+  }
+
+  public void setAddress(String address) {
+    this.address = address;
+  }
+
+  public String getStarttime() {
+    return starttime;
+  }
+
+  public void setStarttime(String starttime) {
+    this.starttime = starttime;
+  }
+
+  public String getEndtime() {
+    return endtime;
+  }
+
+  public void setEndtime(String endtime) {
+    this.endtime = endtime;
+  }
+
+  public String getLocation() {
+    return location;
+  }
+
+  public void setLocation(String location) {
+    this.location = location;
+  }
+
+  public String getBusinescope() {
+    return businescope;
+  }
+
+  public void setBusinescope(String businescope) {
+    this.businescope = businescope;
+  }
+
+  public String getTel() {
+    return tel;
+  }
+
+  public void setTel(String tel) {
+    this.tel = tel;
+  }
+}
diff --git a/backend/src/main/java/com/supwisdom/dlpay/portal/util/PortalConstant.java b/backend/src/main/java/com/supwisdom/dlpay/portal/util/PortalConstant.java
index 490b5d6..c6c7129 100644
--- a/backend/src/main/java/com/supwisdom/dlpay/portal/util/PortalConstant.java
+++ b/backend/src/main/java/com/supwisdom/dlpay/portal/util/PortalConstant.java
@@ -10,6 +10,7 @@
   public static final String SYSPARA_IMAGE_URLASSIGN = "imageserver.url.assign";
   public static final String SYSPARA_IMAGE_URLPUSH = "imageserver.url.push";
   public static final String SYSPARA_ARTICLE_CURRENTNO = "article.currentno";
+  public static final String SYSPARA_OUTLETS_CURRENTNO = "outlets.currentno";
   public static final String SYSPARA_PORTAL_APPID = "portal.appid";
   public static final String SYSPARA_PORTAL_SECRET = "portal.secret";
 
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt
index 4cd7ccc..04af1ff 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt
@@ -4,7 +4,6 @@
 import com.supwisdom.dlpay.api.bean.JsonResult
 import com.supwisdom.dlpay.api.bean.QueryCardInfo
 import com.supwisdom.dlpay.api.bean.QueryCardParam
-import com.supwisdom.dlpay.api.service.UserService
 import com.supwisdom.dlpay.framework.core.JwtConfig
 import com.supwisdom.dlpay.framework.core.JwtTokenUtil
 import com.supwisdom.dlpay.framework.domain.JwtRedis
@@ -45,8 +44,6 @@
     @Autowired
     lateinit var systemUtilService: SystemUtilService
     @Autowired
-    lateinit var userService: UserService
-    @Autowired
     lateinit var userProxy: UserProxy
 
     override fun onAuthenticationSuccess(request: HttpServletRequest, response: HttpServletResponse, authentication: Authentication) {
@@ -89,6 +86,9 @@
             }
             var name = ""
             var signed=""
+            var citizenCardNo = ""
+            var bankCardNo = ""
+            var idno = ""
             if (!user.userid.isNullOrEmpty()) {
                 val personResponse = userProxy.queryPerson(user.userid)
                 if (personResponse.retcode != 0) {
@@ -96,16 +96,25 @@
                     throw UserLoginFailException("查询用户失败")
                 }
                 val person = personResponse.person
-                val cardResponse = userProxy.queryCard(QueryCardParam().apply {
+                name = person.name
+                idno = DataUtil.desensitization(person.idno,3,4)
+                val citizenCardResponse = userProxy.queryCard(QueryCardParam().apply {
+                    this.userid = user.userid
+                    this.cardtype = ConstantUtil.CARDTYPE_CITIZENCARD
+                })
+                if (citizenCardResponse.retcode == 0&&citizenCardResponse.card!=null) {
+                    citizenCardNo = citizenCardResponse.card.cardno
+                }
+                val bankCardResponse = userProxy.queryCard(QueryCardParam().apply {
                     this.userid = user.userid
                     this.cardtype = ConstantUtil.CARDTYPE_BANKCARD
                 })
                 var card:QueryCardInfo?=null
-                if (cardResponse.retcode == 0) {
-                    card = cardResponse.card
+                if (bankCardResponse.retcode == 0) {
+                    card = bankCardResponse.card
                 }
-                name = person.name
                 if(card!=null&&card.signed){
+                    bankCardNo = DataUtil.desensitization(card.cardno,4,4)
                     signed = TradeDict.STATUS_YES
                 }
             }
@@ -123,6 +132,9 @@
                     ?.put("paypwdset",payseted)
                     ?.put("signed", signed)
                     ?.put("imageurl",imageUrl)
+                    ?.put("citizenCardNo",citizenCardNo)
+                    ?.put("bankCardNo",bankCardNo)
+                    ?.put("idno",idno)
                     ?.put("userid",if(user.userid.isNullOrEmpty()) "" else user.userid)))
         } else {
             throw UserLoginFailException("登录错误")
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/PortalApi.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/PortalApi.kt
index eaa5fe7..d5c5219 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/PortalApi.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/PortalApi.kt
@@ -308,6 +308,17 @@
         }
     }
 
+    @RequestMapping(value = ["/article/withdraw/{articleno}"], method = [RequestMethod.POST])
+    fun withdrawArticle(@PathVariable(value = "articleno") articleno: String): JsonResult? {
+        return try {
+            articleService.withdrawArticle(articleno)
+            JsonResult.ok()
+        } catch (e: Exception) {
+            logger.error { e.message }
+            JsonResult.error("撤回文章异常")
+        }
+    }
+
     @RequestMapping(value = ["/article/get/{articleno}"], method = [RequestMethod.GET])
     fun getArticle(@PathVariable(value = "articleno") articleno: String): JsonResult? {
         return try {
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/ArticleAuthDao.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/ArticleAuthDao.kt
index e7f72fb..5cf1a1f 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/ArticleAuthDao.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/ArticleAuthDao.kt
@@ -7,4 +7,5 @@
 @Repository
 interface ArticleAuthDao : JpaRepository<TBArticleAuth, String> {
     fun findByArticlenoAndStatus(articleno: String, status: String):TBArticleAuth?
+    fun deleteByArticleno(articleno: String)
 }
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/ArticleService.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/ArticleService.kt
index 89409d6..d4ed8d9 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/ArticleService.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/ArticleService.kt
@@ -20,6 +20,8 @@
     @Transactional
     fun deleteArticle(articleno:String)
     @Transactional
+    fun withdrawArticle(articleno:String)
+    @Transactional
     fun switchDisplay(articleno:String,value:String):String
     @Transactional
     fun getArticle(articleno:String):TBArticle
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/ArticleServiceImpl.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/ArticleServiceImpl.kt
index f10cb67..31e3abd 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/ArticleServiceImpl.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/ArticleServiceImpl.kt
@@ -125,6 +125,14 @@
         articleDao.save(article)
     }
 
+    override fun withdrawArticle(articleno: String) {
+        val article = articleDao.findByArticlenoAndIsdelete(articleno, PortalConstant.NO)
+                ?: throw RuntimeException("编号为：[${articleno}]的文章未找到")
+        article.status = PortalConstant.ARTICLE_STATUS_SAVE
+        articleDao.save(article)
+        articleAuthDao.deleteByArticleno(articleno)
+    }
+
     override fun switchDisplay(articleno: String, value: String): String {
         val article = articleDao.findByArticlenoAndIsdelete(articleno, PortalConstant.NO)
                 ?: throw RuntimeException("编号为：[${articleno}]的文章未找到")
diff --git a/backend/src/main/resources/data-postgresql.sql b/backend/src/main/resources/data-postgresql.sql
index bc0b484..755e49b 100644
--- a/backend/src/main/resources/data-postgresql.sql
+++ b/backend/src/main/resources/data-postgresql.sql
@@ -14,6 +14,7 @@
 INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('sms.url', 'http://112.35.4.197:15000', '{tenantid}');
 INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('sms.pwd', 'kingstar#2019', '{tenantid}');
 INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('article.currentno', '1', '{tenentid}');
+INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('outlets.currentno', '1', '{tenentid}');
 INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('portal.appid', '800001', '{tenentid}');
 INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('portal.secret', '1a8905a272364ef592e61f4a1288f07d', '{tenentid}');
 INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('aes.cfb.totp.offset', '20', '{tenantid}');
