diff --git a/backend/build.gradle b/backend/build.gradle
index dd3c0ca..45c52ba 100644
--- a/backend/build.gradle
+++ b/backend/build.gradle
@@ -73,6 +73,10 @@
     compile group: 'com.sun.jersey.contribs', name: 'jersey-multipart', version: '1.19.3'
     compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.9.1'
     compile group: 'log4j', name: 'log4j', version: '1.2.17'
+
+    compile group: 'com.supwisdom', name: 'payapi-sdk', version: '1.0.25-4-g8c3fe54'
+    
+    implementation 'org.hamcrest:hamcrest:2.1'
 }
 
 dependencyManagement {
@@ -86,4 +90,15 @@
 }
 compileTestKotlin {
     kotlinOptions.jvmTarget = "1.8"
+}
+
+repositories {
+    mavenCentral()
+    maven {
+        url "http://ykt-nx.supwisdom.com/repository/ecard-repo/"
+        credentials {
+            username 'ecard'
+            password 'Ecard4SUP'
+        }
+    }
 }
\ No newline at end of file
diff --git a/backend/src/main/java/com/supwisdom/dlpay/api/bean/ApiResponse.java b/backend/src/main/java/com/supwisdom/dlpay/api/util/ApiResponse.java
similarity index 92%
rename from backend/src/main/java/com/supwisdom/dlpay/api/bean/ApiResponse.java
rename to backend/src/main/java/com/supwisdom/dlpay/api/util/ApiResponse.java
index e4cbca1..b8cba78 100644
--- a/backend/src/main/java/com/supwisdom/dlpay/api/bean/ApiResponse.java
+++ b/backend/src/main/java/com/supwisdom/dlpay/api/util/ApiResponse.java
@@ -1,4 +1,4 @@
-package com.supwisdom.dlpay.api.bean;
+package com.supwisdom.dlpay.api.util;
 
 public class ApiResponse {
   private Integer retcode;
diff --git a/backend/src/main/java/com/supwisdom/dlpay/api/util/PointTaskCode.java b/backend/src/main/java/com/supwisdom/dlpay/api/util/PointTaskCode.java
new file mode 100644
index 0000000..05cddb7
--- /dev/null
+++ b/backend/src/main/java/com/supwisdom/dlpay/api/util/PointTaskCode.java
@@ -0,0 +1,49 @@
+package com.supwisdom.dlpay.api.util;
+
+public enum PointTaskCode {
+  /**
+   * 签到
+   */
+  SIGN_IN("signin", 4),
+  /**
+   * 认证
+   */
+  AUTH("auth",7),
+  /**
+   * 消费
+   */
+  CONSUME("consume",8),
+  /**
+   * 兑换
+   */
+  EXCHANGE("exchange",9);
+
+  private String code;
+  private Integer taskid;
+
+  PointTaskCode(String code, Integer taskid) {
+    this.code = code;
+    this.taskid = taskid;
+  }
+
+  public String getCode() {
+    return code;
+  }
+
+  public void setCode(String code) {
+    this.code = code;
+  }
+
+  public Integer getTaskid() {
+    return taskid;
+  }
+
+  public void setTaskid(Integer taskid) {
+    this.taskid = taskid;
+  }
+
+  @Override
+  public String toString() {
+    return code;
+  }
+}
diff --git a/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/FeedbackRepositoryImpl.java b/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/FeedbackRepositoryImpl.java
index 131fb49..0487f6c 100644
--- a/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/FeedbackRepositoryImpl.java
+++ b/backend/src/main/java/com/supwisdom/dlpay/portal/dao/impl/FeedbackRepositoryImpl.java
@@ -14,8 +14,8 @@
   @NotNull
   @Override
   public Pagination getFeedbackList(@NotNull FeedbackSearchBean bean) {
-    StringBuilder sql = new StringBuilder("select f.*,p.name username from tb_feedback f left join tb_person p on f.userid = p.userid where 1=1 ");
-    String username = bean.getUsername();
+    StringBuilder sql = new StringBuilder("select f.*,m.phone username from tb_feedback f left join tb_mobile_user m on f.mobileid = m.uid where 1=1 ");
+    String phone = bean.getPhone();
     String title = bean.getTitle();
     String startdate = bean.getStartdate();
     String enddate = bean.getEnddate();
@@ -23,8 +23,8 @@
     String mobileid = bean.getMobileid();
     int pageno = bean.getPageno();
     int pagesize = bean.getPagesize();
-    if (!StringUtil.isEmpty(username)) {
-      sql.append(" and p.name like :username");
+    if (!StringUtil.isEmpty(phone)) {
+      sql.append(" and m.loginid =:phone");
     }
     if (!StringUtil.isEmpty(title)) {
       sql.append(" and f.title like :title");
@@ -43,8 +43,8 @@
     }
     sql.append(" order by f.fbtime desc");
     Finder f = Finder.create(sql.toString());
-    if (!StringUtil.isEmpty(username)) {
-      f.setParameter("username", "%" + username.trim() + "%");
+    if (!StringUtil.isEmpty(phone)) {
+      f.setParameter("phone", phone.trim());
     }
     if (!StringUtil.isEmpty(title)) {
       f.setParameter("title", "%" + title.trim() + "%");
diff --git a/backend/src/main/java/com/supwisdom/dlpay/portal/util/PayApiInit.java b/backend/src/main/java/com/supwisdom/dlpay/portal/util/PayApiInit.java
new file mode 100644
index 0000000..b1917c8
--- /dev/null
+++ b/backend/src/main/java/com/supwisdom/dlpay/portal/util/PayApiInit.java
@@ -0,0 +1,46 @@
+package com.supwisdom.dlpay.portal.util;
+
+import com.supwisdom.dlpay.api.bean.ApiVersionResponse;
+import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.paysdk.ApiLoginHelper;
+import com.supwisdom.dlpay.paysdk.proxy.ApiCommonProxy;
+import com.supwisdom.dlpay.paysdk.proxy.ApiLoginProxy;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.notNullValue;
+
+@Component
+@EnableFeignClients(basePackages = "com.supwisdom.dlpay.paysdk")
+@ComponentScan(basePackages = {"com.supwisdom.dlpay.paysdk"})
+public class PayApiInit {
+  @Autowired
+  private SystemUtilService systemUtilService;
+
+  private String appid;
+
+  private String secret;
+
+  @Autowired
+  private ApiLoginProxy apiLoginProxy;
+
+  @Autowired
+  private ApiCommonProxy apiCommonProxy;
+
+  @PostConstruct
+  public void login() {
+    appid = systemUtilService.getBusinessValue(PortalConstant.SYSPARA_PORTAL_APPID);
+    secret = systemUtilService.getBusinessValue(PortalConstant.SYSPARA_PORTAL_SECRET);
+    ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
+    helper.login(appid, secret);
+    System.out.println("向支付中心登录成功");
+    ApiVersionResponse version = apiCommonProxy.apiVersion();
+    assertThat("get version error " + version.getException(),
+        version.getVersion(), notNullValue());
+  }
+}
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 4a6de31..490b5d6 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,10 +10,16 @@
   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_PORTAL_APPID = "portal.appid";
+  public static final String SYSPARA_PORTAL_SECRET = "portal.secret";
 
   public static final String ARTICLE_STATUS_SAVE = "save";
   public static final String ARTICLE_STATUS_PASS = "pass";
   public static final String ARTICLE_STATUS_RELEASED = "released";
   public static final String ARTICLE_STATUS_REVIEW = "review";
   public static final String ARTICLE_STATUS_REJECT = "reject";
+
+  public static final String POINTTASK_STATUS_UNDONE = "undone";
+  public static final String POINTTASK_STATUS_DONE = "done";
+  public static final String POINTTASK_STATUS_RECEIVED = "received";
 }
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt
new file mode 100644
index 0000000..ee5c14c
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt
@@ -0,0 +1,25 @@
+package com.supwisdom.dlpay.api
+
+import com.supwisdom.dlpay.paysdk.ApiLoginHelper
+import com.supwisdom.dlpay.paysdk.proxy.ApiLoginProxy
+import mu.KotlinLogging
+import net.javacrumbs.shedlock.core.SchedulerLock
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.scheduling.annotation.Scheduled
+import org.springframework.stereotype.Component
+
+@Component
+class RefreshJwtSchedulerTask {
+
+    private val logger = KotlinLogging.logger { }
+
+    @Autowired
+    private lateinit var apiLoginProxy: ApiLoginProxy
+
+    @Scheduled(cron = "0 */20 * * * ?")
+    @SchedulerLock(name = "refreshJwt", lockAtMostForString = "PT10M")
+    fun refreshJwt() {
+        val loginHelper = ApiLoginHelper(apiLoginProxy)
+        loginHelper.refresh()
+    }
+}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt
index 761a5b0..66dea84 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt
@@ -1,7 +1,7 @@
 package com.supwisdom.dlpay.api.service.impl
 
 import com.google.gson.Gson
-import com.supwisdom.dlpay.api.bean.ApiResponse
+import com.supwisdom.dlpay.api.util.ApiResponse
 import com.supwisdom.dlpay.api.service.QRCodeService
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.MD5
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
index 243364b..a731ac1 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
@@ -1,5 +1,7 @@
 package com.supwisdom.dlpay.api.service.impl
 
+import com.supwisdom.dlpay.api.bean.JsonResult
+import com.supwisdom.dlpay.api.bean.UserTaskParam
 import com.supwisdom.dlpay.api.dao.AccountDao
 import com.supwisdom.dlpay.api.dao.PersonDao
 import com.supwisdom.dlpay.api.dao.PersondtlDao
@@ -9,8 +11,17 @@
 import com.supwisdom.dlpay.api.domain.TPersondtl
 import com.supwisdom.dlpay.api.domain.TPointsAccount
 import com.supwisdom.dlpay.api.service.UserService
+import com.supwisdom.dlpay.api.util.PointTaskCode
 import com.supwisdom.dlpay.exception.TransactionProcessException
+import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.*
+import com.supwisdom.dlpay.mobile.dao.MobileUserDao
+import com.supwisdom.dlpay.mobile.domain.TBMobileUser
+import com.supwisdom.dlpay.mobile.exception.PortalBusinessException
+import com.supwisdom.dlpay.paysdk.proxy.UserProxy
+import com.supwisdom.dlpay.portal.bean.PointTaskBean
+import com.supwisdom.dlpay.portal.util.PortalConstant
+import mu.KotlinLogging
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.data.domain.PageRequest
 import org.springframework.data.domain.Sort
@@ -29,6 +40,13 @@
     private lateinit var pointsAccountDao: PointsAccountDao
     @Autowired
     private lateinit var persondtlDao: PersondtlDao
+    @Autowired
+    private lateinit var systemUtilService: SystemUtilService
+    @Autowired
+    private lateinit var mobileUserDao:MobileUserDao
+    @Autowired
+    private lateinit var userProxy: UserProxy
+    val logger = KotlinLogging.logger { }
 
     override fun findAccountByUserid(userid: String, subjno: String?): TAccount? {
         return if (!StringUtil.isEmpty(subjno)) {
@@ -76,4 +94,107 @@
         }
         return result
     }
+
+    override fun completePointTask(user: TBMobileUser, taskcode:String):JsonResult {
+        return if (taskcode == PointTaskCode.SIGN_IN.code) {
+            signInPointTask(user)
+        }else{
+            JsonResult.error(400,"未知的任务CODE")
+        }
+    }
+
+    fun signInPointTask(user: TBMobileUser):JsonResult{
+        val lastTime = user.lastsignintime
+        val hostDateTime = systemUtilService.sysdatetime.hostdatetime
+        if (!lastTime.isNullOrEmpty()) {
+            val lastDate = lastTime.substring(0,8)
+            val hostDate = hostDateTime.substring(0,8)
+            if (lastDate < hostDate) {
+                user.lastsignintime = hostDateTime
+                mobileUserDao.save(user)
+            } else {
+                return JsonResult.error(500,"签到时间异常")
+            }
+        }else{
+            user.lastsignintime = hostDateTime
+            mobileUserDao.save(user)
+        }
+        val taskResponse = userProxy.userTask(UserTaskParam().apply {
+            this.userid = user.userid
+            this.taskid = PointTaskCode.SIGN_IN.taskid.toString()
+        })
+        if (taskResponse.retcode != 0) {
+            logger.error { "用户签到积分任务异常:${taskResponse.retmsg}" }
+            throw PortalBusinessException(taskResponse.retmsg)
+        }
+        return JsonResult.ok()
+    }
+
+    fun querySignInTaskStatus(user: TBMobileUser,list:ArrayList<PointTaskBean>,bean:PointTaskBean){
+        bean.taskcode = PointTaskCode.SIGN_IN.code
+        val lastTime = user.lastsignintime
+        if (!lastTime.isNullOrEmpty()) {
+            val lastDate = lastTime.substring(0,8)
+            val hostDate = systemUtilService.sysdatetime.hostdate
+            if (lastDate < hostDate) {
+                bean.status = PortalConstant.POINTTASK_STATUS_UNDONE
+            } else {
+                bean.status = PortalConstant.POINTTASK_STATUS_RECEIVED
+            }
+        } else {
+            bean.status = PortalConstant.POINTTASK_STATUS_UNDONE
+        }
+        list.add(bean)
+    }
+
+    fun queryAuthTaskStatus(user: TBMobileUser,list:ArrayList<PointTaskBean>,bean:PointTaskBean){
+        bean.taskcode = PointTaskCode.AUTH.code
+        bean.status = PortalConstant.POINTTASK_STATUS_DONE
+        list.add(bean)
+    }
+
+    fun queryConsumeTaskStatus(user: TBMobileUser,list:ArrayList<PointTaskBean>,bean:PointTaskBean){
+        bean.taskcode = PointTaskCode.CONSUME.code
+        bean.status = PortalConstant.POINTTASK_STATUS_DONE
+        list.add(bean)
+    }
+
+    fun queryExchangeTaskStatus(user: TBMobileUser,list:ArrayList<PointTaskBean>,bean:PointTaskBean){
+        bean.taskcode = PointTaskCode.EXCHANGE.code
+        bean.status = PortalConstant.POINTTASK_STATUS_DONE
+        list.add(bean)
+    }
+
+    override fun queryPointTaskStatus(user: TBMobileUser): List<PointTaskBean>? {
+        val result = ArrayList<PointTaskBean>()
+        val taskResponse = userProxy.tPointsTaskNoPage
+        if (taskResponse["retcode"] != 0) {
+            logger.error { "查询积分任务异常" }
+            throw PortalBusinessException("查询积分任务异常")
+        }
+        @Suppress("UNCHECKED_CAST")
+        val data = taskResponse["data"] as ArrayList<LinkedHashMap<String,Any>>
+        data.forEach {
+            val taskid =  it["taskid"] as Int
+            val bean = PointTaskBean().apply {
+                this.points = it["taskpoints"] as Int
+                this.taskname = it["taskname"] as String
+            }
+            when (taskid) {
+                PointTaskCode.SIGN_IN.taskid -> {
+                    querySignInTaskStatus(user,result,bean)
+                }
+                PointTaskCode.AUTH.taskid -> {
+                    queryAuthTaskStatus(user,result,bean)
+                }
+                PointTaskCode.CONSUME.taskid -> {
+                    queryConsumeTaskStatus(user,result,bean)
+                }
+                PointTaskCode.EXCHANGE.taskid -> {
+                    queryExchangeTaskStatus(user,result,bean)
+                }
+            }
+        }
+        return result
+    }
 }
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/api/service/qrcode_service.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/api/service/qrcode_service.kt
index f379574..6367c88 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/api/service/qrcode_service.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/api/service/qrcode_service.kt
@@ -1,6 +1,6 @@
 package com.supwisdom.dlpay.api.service
 
-import com.supwisdom.dlpay.api.bean.ApiResponse
+import com.supwisdom.dlpay.api.util.ApiResponse
 
 interface QRCodeService {
     fun encodeCode(uid: String): ApiResponse
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt
index 810a2f7..a2eeb15 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt
@@ -1,7 +1,10 @@
 package com.supwisdom.dlpay.api.service
 
+import com.supwisdom.dlpay.api.bean.JsonResult
 import com.supwisdom.dlpay.api.domain.*
 import com.supwisdom.dlpay.framework.util.PageResult
+import com.supwisdom.dlpay.mobile.domain.TBMobileUser
+import com.supwisdom.dlpay.portal.bean.PointTaskBean
 import org.springframework.transaction.annotation.Propagation
 import org.springframework.transaction.annotation.Transactional
 
@@ -26,4 +29,10 @@
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
     fun findDtlMonthCountByUserid(userid:String, month :String) : Map<String,Any>?
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
+    fun completePointTask(user:TBMobileUser,taskcode:String):JsonResult
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun queryPointTaskStatus(user:TBMobileUser) : List<PointTaskBean>?
 }
\ No newline at end of file
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 1aad98a..4cd7ccc 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/AuthLoginHandler.kt
@@ -2,6 +2,8 @@
 
 import com.fasterxml.jackson.databind.ObjectMapper
 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
@@ -13,7 +15,9 @@
 import com.supwisdom.dlpay.mobile.domain.TBMobileUser
 import com.supwisdom.dlpay.mobile.exception.UserLoginFailException
 import com.supwisdom.dlpay.mobile.service.MobileApiService
+import com.supwisdom.dlpay.paysdk.proxy.UserProxy
 import com.supwisdom.dlpay.portal.util.PortalConstant
+import com.supwisdom.dlpay.util.ConstantUtil
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.HttpStatus
 import org.springframework.security.authentication.BadCredentialsException
@@ -42,6 +46,8 @@
     lateinit var systemUtilService: SystemUtilService
     @Autowired
     lateinit var userService: UserService
+    @Autowired
+    lateinit var userProxy: UserProxy
 
     override fun onAuthenticationSuccess(request: HttpServletRequest, response: HttpServletResponse, authentication: Authentication) {
         val platform = request.getParameter("platform")
@@ -84,8 +90,20 @@
             var name = ""
             var signed=""
             if (!user.userid.isNullOrEmpty()) {
-                val person = userService.findOnePersonByUserid(user.userid!!)
-                var card = mobileApiService.findCardByUserid(user.userid!!)
+                val personResponse = userProxy.queryPerson(user.userid)
+                if (personResponse.retcode != 0) {
+                    logger.error { "查询用户[${user.userid}]信息失败:${personResponse.retmsg}" }
+                    throw UserLoginFailException("查询用户失败")
+                }
+                val person = personResponse.person
+                val cardResponse = userProxy.queryCard(QueryCardParam().apply {
+                    this.userid = user.userid
+                    this.cardtype = ConstantUtil.CARDTYPE_BANKCARD
+                })
+                var card:QueryCardInfo?=null
+                if (cardResponse.retcode == 0) {
+                    card = cardResponse.card
+                }
                 name = person.name
                 if(card!=null&&card.signed){
                     signed = TradeDict.STATUS_YES
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
index b3149a1..64665f8 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
@@ -2,7 +2,7 @@
 
 import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
 import com.supwisdom.dlpay.agent.service.CitizencardPayService
-import com.supwisdom.dlpay.api.bean.JsonResult
+import com.supwisdom.dlpay.api.bean.*
 import com.supwisdom.dlpay.api.service.QRCodeService
 import com.supwisdom.dlpay.api.service.UploadPicService
 import com.supwisdom.dlpay.api.service.UserService
@@ -19,6 +19,7 @@
 import com.supwisdom.dlpay.mobile.domain.TBMobileUser
 import com.supwisdom.dlpay.mobile.exception.PortalBusinessException
 import com.supwisdom.dlpay.mobile.service.MobileApiService
+import com.supwisdom.dlpay.paysdk.proxy.UserProxy
 import com.supwisdom.dlpay.portal.bean.FeedbackSearchBean
 import com.supwisdom.dlpay.portal.domain.TBFeedback
 import com.supwisdom.dlpay.portal.service.ArticleService
@@ -66,6 +67,8 @@
     lateinit var columnService: ColumnService
     @Autowired
     lateinit var articleService: ArticleService
+    @Autowired
+    lateinit var userProxy: UserProxy
     val logger = KotlinLogging.logger { }
 
     @RequestMapping("/time")
@@ -237,9 +240,15 @@
         }
         var signed = ""
         if (!user.userid.isNullOrEmpty()) {
-            val card = mobileApiService.findCardByUserid(user.userid!!)
-            if (card != null && card.signed) {
-                signed = TradeDict.STATUS_YES
+            val cardResponse = userProxy.queryCard(QueryCardParam().apply {
+                this.userid = user.userid
+                this.cardtype = ConstantUtil.CARDTYPE_BANKCARD
+            })
+            if (cardResponse.retcode == 0) {
+                val card = cardResponse.card
+                if (card.signed) {
+                    signed = TradeDict.STATUS_YES
+                }
             }
         }
         return JsonResult.ok("OK").put("token", token.jwtToken)
@@ -345,6 +354,8 @@
     lateinit var uploadPicService: UploadPicService
     @Autowired
     lateinit var feedbackService: FeedbackService
+    @Autowired
+    lateinit var userProxy: UserProxy
     val logger = KotlinLogging.logger { }
 
     @RequestMapping("/idtypes")
@@ -452,9 +463,13 @@
             redisTemplate.delete(user.phone!!)
             if (!personid.isNullOrEmpty()) {
                 //绑定用户
-                val person = userService.findOnePersonByUserid(personid)
+                val personResponse = userProxy.queryPerson(personid)
+                if (personResponse.retcode != 0) {
+                    logger.error { "查询用户[${personid}]信息失败:${personResponse.retmsg}" }
+                    return JsonResult.error("查询用户信息失败，请稍后重试")
+                }
                 user.bindtime = DateUtil.getNow()
-                user.userid = person.userid
+                user.userid = personResponse.person.userid
                 mobileApiService.saveUser(user)
             }
             return JsonResult.ok("OK").put("randcode", newCode)!!
@@ -475,12 +490,24 @@
             return JsonResult.error("手机号不存在，请注册")
         }
         val phone = user.phone!!
-        val card = mobileApiService.findCardByNo(cardno)
-                ?: return JsonResult.error("银行卡号有误")
+        val cardResponse = userProxy.queryCard(QueryCardParam().apply {
+            this.cardno = cardno
+            this.cardtype = ConstantUtil.CARDTYPE_BANKCARD
+        })
+        if (cardResponse.retcode != 0) {
+            logger.error { "查询卡片[${cardno}]信息失败:${cardResponse.retmsg}" }
+            return JsonResult.error("银行卡号有误")
+        }
+        val card = cardResponse.card
         if (card.userid.isNullOrEmpty() || card.status != TradeDict.STATUS_NORMAL) {
             return JsonResult.error("银行卡号信息有误")
         }
-        val person = userService.findOnePersonByUserid(card.userid)
+        val personResponse = userProxy.queryPerson(card.userid)
+        if (personResponse.retcode != 0) {
+            logger.error { "查询用户[${card.userid}]信息失败:${personResponse.retmsg}" }
+            return JsonResult.error("查询用户信息失败，请稍后重试")
+        }
+        val person = personResponse.person
         if (person.name != name) {
             return JsonResult.error("绑定信息有误[姓名]")
         }
@@ -502,7 +529,11 @@
             signed = TradeDict.STATUS_YES
             if (!card.signed) {
                 card.signed = true
-                mobileApiService.saveCard(card)
+                val response = userProxy.updateCardSign(card.cardno, true)
+                if (response.retcode != 0) {
+                    logger.error { "更新卡片签约状态失败:${response.retmsg}" }
+                    return JsonResult.error("绑卡失败，请稍后重试")
+                }
             }
             user.signedtime = DateUtil.getNow();
             mobileApiService.saveUser(user)
@@ -541,10 +572,22 @@
         if (user.phone.isNullOrEmpty()) {
             return JsonResult.error("手机号不存在，请注册")
         }
-        var card = mobileApiService.findCardByUserid(user.userid!!)
-                ?: return JsonResult.error("卡片不存在，请重新绑定")
+        val cardResponse = userProxy.queryCard(QueryCardParam().apply {
+            this.userid = user.userid
+            this.cardtype = ConstantUtil.CARDTYPE_BANKCARD
+        })
+        if (cardResponse.retcode != 0) {
+            logger.error { "查询用户[${user.userid}]卡片信息失败:${cardResponse.retmsg}" }
+            return JsonResult.error("卡片不存在，请重新绑定")
+        }
+        val card = cardResponse.card
         //call sign api
-        val person = userService.findOnePersonByUserid(card.userid)
+        val personResponse = userProxy.queryPerson(card.userid)
+        if (personResponse.retcode != 0) {
+            logger.error { "查询用户[${card.userid}]信息失败:${personResponse.retmsg}" }
+            return JsonResult.error("查询用户信息失败，请稍后重试")
+        }
+        val person = personResponse.person
         var signed = ""
         //call api
         var resp = citizencardPayService.bindCard(card.cardno, person.name, person.idtype, person.idno, user.phone!!)
@@ -556,7 +599,11 @@
             signed = TradeDict.STATUS_YES
             if (!card.signed) {
                 card.signed = true
-                mobileApiService.saveCard(card)
+                val response = userProxy.updateCardSign(card.cardno, true)
+                if (response.retcode != 0) {
+                    logger.error { "更新卡片签约状态失败:${response.retmsg}" }
+                    return JsonResult.error("绑卡失败，请稍后重试")
+                }
             }
             user.signedtime = DateUtil.getNow();
             mobileApiService.saveUser(user)
@@ -649,8 +696,15 @@
                     ?: return JsonResult.error("用户不存在，请注册")
             var signed = ""
             if (!user.userid.isNullOrEmpty()) {
-                var card = mobileApiService.findCardByUserid(user.userid!!)
-                        ?: return JsonResult.error(-1, "卡片不存在，请重新绑定")
+                val cardResponse = userProxy.queryCard(QueryCardParam().apply {
+                    this.userid = user.userid
+                    this.cardtype = ConstantUtil.CARDTYPE_BANKCARD
+                })
+                if (cardResponse.retcode != 0) {
+                    logger.error { "查询用户[${user.userid}]卡片信息失败:${cardResponse.retmsg}" }
+                    return JsonResult.error(-1,"卡片不存在，请重新绑定")
+                }
+                val card = cardResponse.card
                 if (card.signed) {
                     signed = TradeDict.STATUS_YES
                 }
@@ -676,10 +730,22 @@
         }
         var signed: String
         if (!user.userid.isNullOrEmpty()) {
-            var card = mobileApiService.findCardByUserid(user.userid!!)
-                    ?: return JsonResult.error("卡片不存在，请重新绑定")
+            val cardResponse = userProxy.queryCard(QueryCardParam().apply {
+                this.userid = user.userid
+                this.cardtype = ConstantUtil.CARDTYPE_BANKCARD
+            })
+            if (cardResponse.retcode != 0) {
+                logger.error { "查询用户[${user.userid}]卡片信息失败:${cardResponse.retmsg}" }
+                return JsonResult.error("卡片不存在，请重新绑定")
+            }
+            val card = cardResponse.card
+            val personResponse = userProxy.queryPerson(card.userid)
+            if (personResponse.retcode != 0) {
+                logger.error { "查询用户[${card.userid}]信息失败:${personResponse.retmsg}" }
+                return JsonResult.error("查询用户信息失败，请稍后重试")
+            }
+            val person = personResponse.person
             //call sign api
-            val person = userService.findOnePersonByUserid(card.userid)
             val captcha = agree//此处为验证码，暂由此参数代替
             var resp = citizencardPayService.signCard(card.cardno, person.name, person.idtype, person.idno, user.phone!!, YnrccUtil.TRANSTYPE_SIGNCARD, captcha)
             if (resp.code != "0000") {
@@ -687,7 +753,11 @@
             }
             card.signed = true
             user.signedtime = DateUtil.getNow()
-            mobileApiService.saveCard(card)
+            val response = userProxy.updateCardSign(card.cardno, true)
+            if (response.retcode != 0) {
+                logger.error { "更新卡片签约状态失败:${response.retmsg}" }
+                return JsonResult.error("签约银行协议失败，请稍后重试")
+            }
             mobileApiService.saveUser(user)
             signed = TradeDict.STATUS_YES
         } else {
@@ -734,8 +804,20 @@
         if (!user.paypwd.isNullOrEmpty()) {
             payseted = true
         }
-        val person = userService.findOnePersonByUserid(user.userid!!)
-        val card = mobileApiService.findCardByUserid(user.userid!!)
+        val cardResponse = userProxy.queryCard(QueryCardParam().apply {
+            this.userid = user.userid
+            this.cardtype = ConstantUtil.CARDTYPE_BANKCARD
+        })
+        var card:QueryCardInfo? = null
+        if (cardResponse.retcode == 0) {
+            card = cardResponse.card
+        }
+        val personResponse = userProxy.queryPerson(user.userid)
+        if (personResponse.retcode != 0) {
+            logger.error { "查询用户[${user.userid}]信息失败:${personResponse.retmsg}" }
+            return JsonResult.error("查询用户信息失败，请稍后重试")
+        }
+        val person = personResponse.person
         var needrebind = false
         var signed = ""
         if (card == null) {
@@ -795,9 +877,18 @@
             }
 
         }
-
         val name = person.name
-        val page = userService.findPersondtlByUserid(user.userid!!, no, month)
+        val queryDtlInfo = userProxy.queryPersonDtl(QueryPersonDtlParam().apply {
+            this.month = month
+            this.userid = user.userid
+            this.pageno = no
+            this.pagesize = 10
+        })
+        if (queryDtlInfo["retcode"] != 0) {
+            logger.error { "查询用户[${user.userid}]月份[${month}]的流水失败:${queryDtlInfo["retmsg"]}" }
+            return JsonResult.error("查询流水失败，请稍后重试")
+        }
+        val page = queryDtlInfo["data"]
         return JsonResult.ok("OK").put("page", page)
                 ?.put("today", today)
                 ?.put("yesterday", yester)
@@ -825,8 +916,12 @@
         if (user.userid.isNullOrEmpty()) {
             return JsonResult.ok("OK")
         }
-        val data = userService.findDtlMonthCountByUserid(user.userid!!, month)
-        return JsonResult.ok().put("data", data)
+        val billCount = userProxy.billCount(user.userid!!, month)
+        if (billCount["retcode"] != 0) {
+            logger.error { "查询用户[${user.userid}]月份[${month}]的统计流水失败:${billCount["retmsg"]}" }
+            return JsonResult.error("查询流水失败，请稍后重试")
+        }
+        return JsonResult.ok().put("data", billCount["data"])
     }
 
     /**
@@ -896,9 +991,21 @@
         if (user.userid.isNullOrEmpty()) {
             return JsonResult.error(-1, "银行卡未绑定，请先绑定")
         }
-        val person = userService.findOnePersonByUserid(user.userid!!)
-        val card = mobileApiService.findCardByUserid(user.userid!!)
-                ?: return JsonResult.error(-1, "银行卡未绑定，请先绑定")
+        val cardResponse = userProxy.queryCard(QueryCardParam().apply {
+            this.userid = user.userid
+            this.cardtype = ConstantUtil.CARDTYPE_BANKCARD
+        })
+        if (cardResponse.retcode != 0) {
+            logger.error { "查询用户[${user.userid}]卡片信息失败:${cardResponse.retmsg}" }
+            return JsonResult.error(-1, "银行卡未绑定，请先绑定")
+        }
+        val card = cardResponse.card
+        val personResponse = userProxy.queryPerson(user.userid)
+        if (personResponse.retcode!= 0) {
+            logger.error { "查询用户[${user.userid}]信息失败:${personResponse.retmsg}" }
+            return JsonResult.error("查询用户信息失败，请稍后重试")
+        }
+        val person = personResponse.person
         var status = ""
         //normal/loss/frozen/locked
         when (card.transStatus) {
@@ -938,13 +1045,24 @@
                 if (it) mobileApiService.saveUser(user)
             }
         }
-        var card = mobileApiService.findCardByUserid(user.userid!!)
-                ?: return JsonResult.error(-1, "银行卡未绑定，请先绑定")
+        val cardResponse = userProxy.queryCard(QueryCardParam().apply {
+            this.userid = user.userid
+            this.cardtype = ConstantUtil.CARDTYPE_BANKCARD
+        })
+        if (cardResponse.retcode != 0) {
+            logger.error { "查询用户[${user.userid}]卡片信息失败:${cardResponse.retmsg}" }
+            return JsonResult.error(-1, "银行卡未绑定，请先绑定")
+        }
+        val card = cardResponse.card
         if (card.transStatus != TradeDict.STATUS_NORMAL) {
             return JsonResult.error("卡状态非正常，不能挂失")
         }
         card.transStatus = TradeDict.STATUS_LOST
-        mobileApiService.saveCard(card)
+        val response = userProxy.updateCardTransStatus(card.cardno, TradeDict.STATUS_LOST)
+        if (response.retcode != 0) {
+            logger.error { "更新卡片交易状态失败:${response.retmsg}" }
+            return JsonResult.error("挂失失败，请稍后重试")
+        }
         return JsonResult.ok("ok")
     }
 
@@ -976,17 +1094,33 @@
                 ?: return JsonResult.error("用户不存在，请注册")
         var signed: String
         if (!user.userid.isNullOrEmpty()) {
-            var card = mobileApiService.findCardByUserid(user.userid!!)
-                    ?: return JsonResult.error("银行卡不存在，不能解除代扣协议")
+            val cardResponse = userProxy.queryCard(QueryCardParam().apply {
+                this.userid = user.userid
+                this.cardtype = ConstantUtil.CARDTYPE_BANKCARD
+            })
+            if (cardResponse.retcode != 0) {
+                logger.error { "查询用户[${user.userid}]卡片信息失败:${cardResponse.retmsg}" }
+                return JsonResult.error(-1, "银行卡不存在，不能解除代扣协议")
+            }
+            val card = cardResponse.card
             //call sign api
-            val person = userService.findOnePersonByUserid(card.userid)
+            val personResponse = userProxy.queryPerson(card.userid)
+            if (personResponse.retcode != 0) {
+                logger.error { "查询用户[${card.userid}]信息失败:${personResponse.retmsg}" }
+                return JsonResult.error("查询用户信息失败，请稍后重试")
+            }
+            val person = personResponse.person
             val captcha = ""//此处为验证码，暂由此参数代替
             var resp = citizencardPayService.signCard(card.cardno, person.name, person.idtype, person.idno, user.phone!!, YnrccUtil.TRANSTYPE_UNSIGNCARD, captcha)
             if (resp.code != "0000") {
                 return JsonResult.error(resp.message)
             }
             card.signed = false
-            mobileApiService.saveCard(card)
+            val response = userProxy.updateCardSign(card.cardno, false)
+            if (response.retcode != 0) {
+                logger.error { "更新卡片签约状态失败:${response.retmsg}" }
+                return JsonResult.error("解除银行协议失败，请稍后重试")
+            }
             signed = TradeDict.STATUS_NO
         } else {
             return JsonResult.error("未绑定银行卡，不能解除代扣协议")
@@ -1023,11 +1157,22 @@
                 if (it) mobileApiService.saveUser(user)
             }
         }
-        var card = mobileApiService.findCardByUserid(user.userid!!)
-                ?: return JsonResult.error(-1, "银行卡未绑定，无需解绑")
+        val cardResponse = userProxy.queryCard(QueryCardParam().apply {
+            this.userid = user.userid
+            this.cardtype = ConstantUtil.CARDTYPE_BANKCARD
+        })
+        if (cardResponse.retcode != 0) {
+            logger.error { "查询用户[${user.userid}]卡片信息失败:${cardResponse.retmsg}" }
+            return JsonResult.error(-1, "银行卡未绑定，无需解绑")
+        }
+        val card = cardResponse.card
         card.signed = false
         user.userid = null
-        mobileApiService.saveCard(card)
+        val response = userProxy.updateCardSign(card.cardno, false)
+        if (response.retcode != 0) {
+            logger.error { "更新卡片签约状态失败:${response.retmsg}" }
+            return JsonResult.error("解除绑定失败，请稍后重试")
+        }
         mobileApiService.saveUser(user)
         return JsonResult.ok("OK")
                 ?.put("signed", TradeDict.STATUS_NO)!!
@@ -1114,4 +1259,136 @@
                 ?: return JsonResult.error("未找到该条留言")
         return JsonResult.ok().put("data",feedback)
     }
+
+    /**
+     * 查询用户总积分
+     */
+    @Suppress("UNCHECKED_CAST")
+    @RequestMapping(value = ["/point/total"],method = [RequestMethod.GET])
+    fun getTotalPoint():JsonResult?{
+        val p = SecurityContextHolder.getContext().authentication
+        val user = (mobileApiService.findUserById(p.name)
+                ?: return JsonResult.error("用户不存在，请注册"))
+        if (!user.userid.isNullOrEmpty()) {
+            val cardResponse = userProxy.queryCard(QueryCardParam().apply {
+                this.userid = user.userid
+                this.cardtype = ConstantUtil.CARDTYPE_CITIZENCARD
+            })
+            if (cardResponse.retcode != 0) {
+                return JsonResult.ok().put("data",0)
+            }
+            val card = cardResponse.card
+            val personResponse = userProxy.queryPerson(card.userid)
+            if (personResponse.retcode != 0) {
+                return JsonResult.ok().put("data",0)
+            }
+            val person = personResponse.person
+            val pointResponse = userProxy.getUserPoints(UserPointsParam().apply {
+                this.pageNo = 1
+                this.pageSize = 1
+                this.name = person.name
+                this.idno = card.cardno
+            })
+            if (pointResponse["retcode"] != 0) {
+                logger.error { "查询用户[${user.userid}]积分失败" }
+                return JsonResult.error("查询积分失败")
+            }
+            val page = pointResponse["page"] as LinkedHashMap<String,Any>
+            val data = page["data"] as ArrayList<LinkedHashMap<String,Any>>
+            if (data.isNotEmpty()) {
+                val pointsMain = data[0]["tPointsMain"] as LinkedHashMap<String,Any>
+                return JsonResult.ok().put("data",pointsMain["points"])
+            }
+            return JsonResult.ok().put("data",0)
+        }else{
+            return JsonResult.ok().put("data",0)
+        }
+    }
+
+    /**
+     * 查询用户积分流水
+     */
+    @RequestMapping(value = ["/point/flow"],method = [RequestMethod.GET])
+    fun getTotalPoint(pageno:Int,pagesize:Int):JsonResult?{
+        val p = SecurityContextHolder.getContext().authentication
+        val user = (mobileApiService.findUserById(p.name)
+                ?: return JsonResult.error("用户不存在，请注册"))
+        val emptyResult = PageResult<Any>().apply {
+            this.count = 0
+        }
+        if (!user.userid.isNullOrEmpty()) {
+            val cardResponse = userProxy.queryCard(QueryCardParam().apply {
+                this.userid = user.userid
+                this.cardtype = ConstantUtil.CARDTYPE_CITIZENCARD
+            })
+            if (cardResponse.retcode != 0) {
+                return JsonResult.ok().put("data",emptyResult)
+            }
+            val card = cardResponse.card
+            val personResponse = userProxy.queryPerson(card.userid)
+            if (personResponse.retcode != 0) {
+                return JsonResult.ok().put("data",emptyResult)
+            }
+            val person = personResponse.person
+            val pointResponse = userProxy.getUserPoints(UserPointsParam().apply {
+                this.pageNo = pageno
+                this.pageSize = pagesize
+                this.name = person.name
+                this.idno = card.cardno
+            })
+            if (pointResponse["retcode"] != 0) {
+                logger.error { "查询用户[${user.userid}]积分流水失败" }
+                return JsonResult.error("查询积分流水失败")
+            }
+            return JsonResult.ok().put("data",pointResponse["page"])
+        }else{
+            return JsonResult.ok().put("data",emptyResult)
+        }
+    }
+
+    /**
+     * 完成积分任务
+     */
+    @RequestMapping(value = ["/point/task/{taskcode}"],method = [RequestMethod.POST])
+    fun completePointTask(@PathVariable taskcode:String):JsonResult?{
+        try {
+            val p = SecurityContextHolder.getContext().authentication
+            val user = (mobileApiService.findUserById(p.name)
+                    ?: return JsonResult.error("用户不存在，请注册"))
+            if (!user.userid.isNullOrEmpty()) {
+                val personResponse = userProxy.queryPerson(user.userid)
+                if (personResponse.retcode != 0) {
+                    logger.error { "查询用户[${user.userid}]信息失败:${personResponse.retmsg}" }
+                    return JsonResult.error("查询用户信息失败，请稍后重试")
+                }
+                return userService.completePointTask(user,taskcode)
+            } else {
+                return JsonResult.error("未绑定银行卡，不能获取积分")
+            }
+        } catch (e: Exception) {
+            if (e is PortalBusinessException) {
+                return JsonResult.error(e.message)
+            }
+            return JsonResult.error("服务器繁忙，请稍后重试")
+        }
+    }
+
+    /**
+     * 查询积分状态
+     */
+    @RequestMapping(value = ["/point/taskstatus"],method = [RequestMethod.GET])
+    fun completePointTask():JsonResult?{
+        try {
+            val p = SecurityContextHolder.getContext().authentication
+            val user = (mobileApiService.findUserById(p.name)
+                    ?: return JsonResult.error("用户不存在，请注册"))
+            val result = userService.queryPointTaskStatus(user)
+            return JsonResult.ok().put("data",result)
+        } catch (e: Exception) {
+            if (e is PortalBusinessException) {
+                return JsonResult.error(e.message)
+            }
+            return JsonResult.error("服务器繁忙，请稍后重试")
+        }
+    }
 }
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBMobileUser.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBMobileUser.kt
index 339e607..7f84e2c 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBMobileUser.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/mobile/domain/TBMobileUser.kt
@@ -178,6 +178,9 @@
     @Column(name = "phone", length = 15)
     var phone: String? = null
 
+    @Column(name = "lastsignintime", length = 14)
+    var lastsignintime: String? = null
+
     fun checkLoginpwdtime():Int{
         if (this.loginpwderror >= 5 && (System.currentTimeMillis() - this.loginpwderrortime!!) < 1000 * 60 * 30) {
             return -1
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 8860dc1..a7ef28b 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/PortalApi.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/PortalApi.kt
@@ -75,7 +75,7 @@
             val p = SecurityContextHolder.getContext().authentication
             val oper = operatorDetailService.findByOperid(p.name)
             val data = HashMap<String, String>()
-            val url = systemUtilService.getBusinessValue(PortalConstant.SYSPARA_IMAGESERVER_URL)
+            val url = systemUtilService.getBusinessValue(PortalConstant.SYSPARA_IMAGE_URLPUSH)
             data["name"] = oper.opername
             data["roles"] = "admin"
             data["url"] = url
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/bean/FeedbackSearchBean.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/bean/FeedbackSearchBean.kt
index d15c56b..07826b9 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/bean/FeedbackSearchBean.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/bean/FeedbackSearchBean.kt
@@ -1,7 +1,7 @@
 package com.supwisdom.dlpay.portal.bean
 
 class FeedbackSearchBean {
-    var username: String = ""
+    var phone: String = ""
     var title: String = ""
     var startdate: String = ""
     var enddate: String = ""
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/bean/PointTaskBean.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/bean/PointTaskBean.kt
new file mode 100644
index 0000000..357865e
--- /dev/null
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/bean/PointTaskBean.kt
@@ -0,0 +1,10 @@
+package com.supwisdom.dlpay.portal.bean
+
+import com.supwisdom.dlpay.portal.util.PortalConstant.POINTTASK_STATUS_RECEIVED
+
+class PointTaskBean {
+    var taskcode: String = ""
+    var status: String = POINTTASK_STATUS_RECEIVED
+    var points: Int = 0
+    var taskname: String = ""
+}
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/ResourceDao.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/ResourceDao.kt
index 4d79afe..d66dd64 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/ResourceDao.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/dao/ResourceDao.kt
@@ -8,9 +8,9 @@
 @Repository
 interface ResourceDao : JpaRepository<TBResource, String> {
 
-    @Query("select t2 from TRoleResource t1,TBResource t2 where t1.resid = t2.resid and t2.isleaf = '0' and t1.roleid=?1 order by t2.ordernum")
+    @Query("select t2 from TRoleResource t1,TBResource t2 where t1.resid = t2.resid and t2.isleaf = '0' and t1.roleid=?1 and showflag='1' order by t2.ordernum")
     fun findRootListByRole(roleId: String): List<TBResource>
 
-    @Query("select t2 from TRoleResource t1,TBResource t2 where t1.resid = t2.resid and t2.isleaf = '1' and t1.roleid=?1 and t2.parentid=?2 order by t2.ordernum")
+    @Query("select t2 from TRoleResource t1,TBResource t2 where t1.resid = t2.resid and t2.isleaf = '1' and t1.roleid=?1 and showflag='1' and t2.parentid=?2 order by t2.ordernum")
     fun findChildrenByRoleAndParent(roleId: String, parentId: String): List<TBResource>
 }
\ No newline at end of file
diff --git a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/FeedbackServiceImpl.kt b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/FeedbackServiceImpl.kt
index dfa359d..b4f5e70 100644
--- a/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/FeedbackServiceImpl.kt
+++ b/backend/src/main/kotlin/com/supwisdom/dlpay/portal/service/Impl/FeedbackServiceImpl.kt
@@ -37,12 +37,7 @@
         val list = page.list as List<TBFeedback>
         list.forEach {
             it.pictures = annexDao.getByFbid(it.fbid)
-            if (it.userid.isNullOrEmpty()) {
-                val mobileUser = mobileUserService.getByUid(it.mobileid)
-                if (mobileUser != null) {
-                    it.username = "用户" + mobileUser.phone!!.substring(7)
-                }
-            }
+            it.username = "用户" + it.username.substring(7)
         }
         return page
     }
diff --git a/backend/src/main/resources/data-postgresql.sql b/backend/src/main/resources/data-postgresql.sql
index 562254a..1a98333 100644
--- a/backend/src/main/resources/data-postgresql.sql
+++ b/backend/src/main/resources/data-postgresql.sql
@@ -5,5 +5,42 @@
 INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('imageserver.url.image', 'http://ykt.supwisdom.com:9119/touchorder/dcpic', '{tenentid}');
 INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('imageserver.url.push', 'http://ykt.supwisdom.com:8777', '{tenentid}');
 
+INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('sms.addserial', '', '{tenantid}');
+INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('sms.priority', '1', '{tenantid}');
+INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('sms.ecname', '大理市信息化发展有限责任公司', '{tenantid}');
+INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('sms.sign', 'Yuns9bbB5', '{tenantid}');
+INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('sms.tempid', '755a16cc9c0649acbb3f3b0415a49a46', '{tenantid}');
+INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('sms.account', 'dlapp', '{tenantid}');
+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 ('portal.appid', '700001', '{tenentid}');
+INSERT INTO "tb_businesspara"("parakey", "paraval", "tenantid") VALUES ('portal.secret', '5f788ce433ec44f299351cdf7f137e81', '{tenentid}');
+
+INSERT INTO "tb_column"("columnid", "isleaf", "name", "needreview", "parentid", "code", "ispublic", "publishable", "ordernum") VALUES ('2c9cab947451988c017451a737b10000', '0', '线上活动', '0', '', 'OnlineActivities', '1', '1', 12);
+INSERT INTO "tb_column"("columnid", "isleaf", "name", "needreview", "parentid", "code", "ispublic", "publishable", "ordernum") VALUES ('2c9cab947451988c017451b280870001', '0', '线下活动', '0', '', 'OfflineActivities', '1', '1', 13);
+INSERT INTO "tb_column"("columnid", "isleaf", "name", "needreview", "parentid", "code", "ispublic", "publishable", "ordernum") VALUES ('2c9cab947428d6fe017428d8c2610000', '0', '热门活动', '0', NULL, 'PopularActivities', '1', '1', 1);
+
+INSERT INTO "tb_resource"("resid", "isleaf", "ordernum", "parentid", "resname", "respath", "showflag", "icon") VALUES ('f066939ecbf64da3a54fa93d56e4391b', '0', 1, NULL, '系统中心', '#', '1', 'el-icon-s-home');
+INSERT INTO "tb_resource"("resid", "isleaf", "ordernum", "parentid", "resname", "respath", "showflag", "icon") VALUES ('286daeeccc8847f4a5a24b2c04079e33', '1', 1, 'f066939ecbf64da3a54fa93d56e4391b', '操作员管理', '/operator/index', '1', NULL);
+INSERT INTO "tb_resource"("resid", "isleaf", "ordernum", "parentid", "resname", "respath", "showflag", "icon") VALUES ('42f227fbe7744adcaef7d15583276a33', '1', 2, 'f066939ecbf64da3a54fa93d56e4391b', '留言管理', '/feedback/index', '1', NULL);
+INSERT INTO "tb_resource"("resid", "isleaf", "ordernum", "parentid", "resname", "respath", "showflag", "icon") VALUES ('a1de09561f6740cab1065707fff8e8ae', '1', 3, 'f066939ecbf64da3a54fa93d56e4391b', '推送消息管理', '/pushmsg/index', '1', NULL);
+INSERT INTO "tb_resource"("resid", "isleaf", "ordernum", "parentid", "resname", "respath", "showflag", "icon") VALUES ('81d3556981c34633adadb0fc4dc8d1f3', '1', 4, 'f066939ecbf64da3a54fa93d56e4391b', '栏目管理', '/column/index', '1', NULL);
+INSERT INTO "tb_resource"("resid", "isleaf", "ordernum", "parentid", "resname", "respath", "showflag", "icon") VALUES ('99604b8d18b34417befe051a3720cbed', '1', 6, 'f066939ecbf64da3a54fa93d56e4391b', '创建文章', '/article/create', '1', NULL);
+INSERT INTO "tb_resource"("resid", "isleaf", "ordernum", "parentid", "resname", "respath", "showflag", "icon") VALUES ('4665765bf07d455486f2a5215dd97380', '1', 5, 'f066939ecbf64da3a54fa93d56e4391b', '文章管理', '/article/list', '1', NULL);
+
+INSERT INTO "tb_operator"("operid", "closedate", "email", "mobile", "opendate", "opercode", "opername", "operpwd", "opertype", "sex", "status", "tenantid", "thirdadmin", "jti", "roleid") VALUES ('LOR2IwRkbOjp+sVG9KR2BpHZbwGKepS4', '20500101', NULL, NULL, '20190101', 'system', '系统管理员', '$2a$10$Ex9xp11.vCaD8D0a7ahiUOKqDij1TcCUBwRAmrqXeDvAkmzLibn4.', 'oper', NULL, 'normal', '{tenantid}', 'no', 'QwC1ln7rReYmBOhq57op6Q', '20497f2fa27a44f7841492288ab75d88');
+
+INSERT INTO "tb_role"("roleid", "detail", "moditime", "rolecode", "rolename") VALUES ('20497f2fa27a44f7841492288ab75d88', '系统管理员', '20200803173823', 'S', '系统管理员');
+
+INSERT INTO "tb_role_resource"("id", "addtime", "resid", "roleid") VALUES ('36fe95266fbc4eabacf2b7022b1bf7f2', '20200803174123', 'f066939ecbf64da3a54fa93d56e4391b', '20497f2fa27a44f7841492288ab75d88');
+INSERT INTO "tb_role_resource"("id", "addtime", "resid", "roleid") VALUES ('7197af22f7864c1ca15817a54dc6411c', '20200803174123', '286daeeccc8847f4a5a24b2c04079e33', '20497f2fa27a44f7841492288ab75d88');
+INSERT INTO "tb_role_resource"("id", "addtime", "resid", "roleid") VALUES ('5521acf036d54dc78f751e8a674133fb', '20200804141135', '42f227fbe7744adcaef7d15583276a33', '20497f2fa27a44f7841492288ab75d88');
+INSERT INTO "tb_role_resource"("id", "addtime", "resid", "roleid") VALUES ('ea8752334cde4df09db81189cc06bafa', '20200814165959', 'a1de09561f6740cab1065707fff8e8ae', '20497f2fa27a44f7841492288ab75d88');
+INSERT INTO "tb_role_resource"("id", "addtime", "resid", "roleid") VALUES ('fd4a4e21231e4844b1310f95afc40f9a', '20200825152358', '81d3556981c34633adadb0fc4dc8d1f3', '20497f2fa27a44f7841492288ab75d88');
+INSERT INTO "tb_role_resource"("id", "addtime", "resid", "roleid") VALUES ('fc8f90bb3b6d41f8b7e1b840b1a0d590', '20200827110834', '4665765bf07d455486f2a5215dd97380', '20497f2fa27a44f7841492288ab75d88');
+INSERT INTO "tb_role_resource"("id", "addtime", "resid", "roleid") VALUES ('460d7f0b57eb4dcfb73fb1b51ad37f4f', '20200827142245', '99604b8d18b34417befe051a3720cbed', '20497f2fa27a44f7841492288ab75d88');
+
+
 ---------  end of script
 commit;
diff --git a/backend/src/main/resources/data.sql b/backend/src/main/resources/data.sql
index 3bd9798..8512f52 100644
--- a/backend/src/main/resources/data.sql
+++ b/backend/src/main/resources/data.sql
@@ -1,15 +1,6 @@
 INSERT INTO tb_tenantconfig(cfgid, tenantid, datacenter_id)
 values ('main', '{tenantid}', '01');
 
-INSERT INTO tb_operator(operid, closedate, opendate, opercode, opername, operpwd, opertype, status, thirdadmin, tenantid)
-VALUES ('LOR2IwRkbOjp+sVG9KR2BpHZbwGKepS4', '20500101', '20190101', 'system', '系统管理员', '$2a$10$Ex9xp11.vCaD8D0a7ahiUOKqDij1TcCUBwRAmrqXeDvAkmzLibn4.', 'oper', 'normal', 'no', '{tenantid}');
-
-
-INSERT INTO tb_role(roleid, createtime, editflag, lastsaved, rolecode, roledesc, rolename, tenantid)
-VALUES ('d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '20190101000000', 0, '', 'ROLE_ADMIN', '超级管理员', '超级管理员', '{tenantid}');
-
-INSERT INTO tb_oper_role(id, operid, roleid, tenantid)
-VALUES ('1', 'LOR2IwRkbOjp+sVG9KR2BpHZbwGKepS4', 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 
 INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
 VALUES (1, NULL, 0, NULL, 'layui-icon-home', '#', '主页', 1, -1, '{tenantid}');
