diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryCardParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryCardParam.java
new file mode 100644
index 0000000..f9c6c03
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryCardParam.java
@@ -0,0 +1,30 @@
+package com.supwisdom.dlpay.api.bean;
+
+import com.supwisdom.dlpay.api.APIRequestParam;
+import com.supwisdom.dlpay.api.annotation.Sign;
+import com.supwisdom.dlpay.api.exception.RequestParamCheckException;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.validation.constraints.NotEmpty;
+
+@Getter
+@Setter
+public class QueryCardParam extends APIRequestParam {
+  @Sign
+  private String cardno;
+  @Sign
+  private String userid;
+  @Sign
+  @NotEmpty(message = "卡片类型不能为空")
+  private String cardtype;
+
+  @Override
+  public boolean checkParam() throws RequestParamCheckException {
+    if (StringUtils.isEmpty(cardno) && StringUtils.isEmpty(cardno)) {
+      throw new RequestParamCheckException("卡号或用户ID不能全为空");
+    }
+    return true;
+  }
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryPersonDtlParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryPersonDtlParam.java
new file mode 100644
index 0000000..35d0b9d
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryPersonDtlParam.java
@@ -0,0 +1,31 @@
+package com.supwisdom.dlpay.api.bean;
+
+import com.supwisdom.dlpay.api.APIRequestParam;
+import com.supwisdom.dlpay.api.annotation.Sign;
+import com.supwisdom.dlpay.api.exception.RequestParamCheckException;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotEmpty;
+
+@Getter
+@Setter
+public class QueryPersonDtlParam extends APIRequestParam {
+  @Sign
+  @NotEmpty(message = "userid不能为空")
+  private String userid;
+  @Sign
+  @NotEmpty(message = "查询月份不能为空")
+  private String month;
+  @Sign
+  @NotEmpty(message = "起始页不能为空")
+  private Integer pageno;
+  @Sign
+  @NotEmpty(message = "每页条数不能为空")
+  private Integer pagesize;
+
+  @Override
+  public boolean checkParam() throws RequestParamCheckException {
+    return true;
+  }
+}
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 c803535..2aece8f 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
@@ -5,6 +5,7 @@
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
 
 @FeignClient(value = "userProxy", url = "${payapi.url}")
 public interface UserProxy {
@@ -34,4 +35,13 @@
 
   @PostMapping("/api/user/getUserPoints")
   ApiResponse getUserPoints(@RequestBody UserPointsParam param);
+
+  @PostMapping("/api/user/queryPersonDtl")
+  ApiResponse queryPersonDtl(@RequestBody QueryPersonDtlParam param);
+
+  @PostMapping("/api/user/queryPerson")
+  ApiResponse queryPerson(@RequestParam("userid") String userid);
+
+  @PostMapping("/api/user/queryCard")
+  ApiResponse queryCard(@RequestBody QueryCardParam param);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersondtlDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersondtlDao.java
index 1826197..0f39c37 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersondtlDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersondtlDao.java
@@ -15,6 +15,7 @@
 @Repository
 public interface PersondtlDao extends JpaRepository<TPersondtl, String>,JpaSpecificationExecutor<TPersondtl> {
     Page<TPersondtl> findByUseridAndStatus(String userid,String status, Pageable pageable);
+    Page<TPersondtl> findByUseridAndStatusAndTransdateBetween(String userid, String status,String startdate,String enddate, Pageable pageable);
 
     @Query("select count(t.refno) as totalcnt,sum(t.amount) as totalamt from TPersondtl t where t.status='success' and t.accdate=?1 and t.sourceType=?2 and t.tenantid=?3 ")
     CountAmountBean getPersondtlSumInfo(String accdate, String sourcetype, String tenantid);
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 94b077b..04a0a82 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
@@ -195,4 +195,29 @@
         return  ResponseEntity.ok(ResponseBodyBuilder.create().data("page", ret!!)
                     .success("ok"))
     }
+
+    @PostMapping("/queryPersonDtl")
+    fun queryPersonDtl(@RequestBody param: QueryPersonDtlParam): ResponseEntity<Any> {
+        val page = useService.findPersondtlByUseridAndMonth(param)
+        return  ResponseEntity.ok(ResponseBodyBuilder.create().data("data", page)
+                .success("ok"))
+    }
+
+    @PostMapping("/queryPerson")
+    fun queryPersonDtl( userid:String ): ResponseEntity<Any> {
+        val person = useService.findPersonByUserid(userid)
+                ?:ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .fail(500, "未找到[userid=${userid}]的用户"))
+        return  ResponseEntity.ok(ResponseBodyBuilder.create().data("data", person)
+                .success("ok"))
+    }
+
+    @PostMapping("/queryCard")
+    fun queryCard(@RequestBody param: QueryCardParam): ResponseEntity<Any> {
+        val card = cardService.getCardByCardNoOrUserid(param)
+                ?:ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .fail(500, "未找到指定条件的卡片"))
+        return  ResponseEntity.ok(ResponseBodyBuilder.create().data("data", card)
+                .success("ok"))
+    }
 }
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 b262bbb..7330e29 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,6 +1,7 @@
 package com.supwisdom.dlpay.api.service
 
 import com.supwisdom.dlpay.api.bean.CardsResponse
+import com.supwisdom.dlpay.api.bean.QueryCardParam
 import com.supwisdom.dlpay.api.bean.UserInforResponse
 import com.supwisdom.dlpay.api.domain.TCard
 import com.supwisdom.dlpay.api.domain.TPerson
@@ -22,4 +23,7 @@
 
     @Transactional(rollbackFor = arrayOf(Exception::class), readOnly = true)
     fun getPersonByUserid(userid: String): UserInforResponse
+
+    @Transactional(rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun getCardByCardNoOrUserid(param: QueryCardParam): TCard?
 }
\ 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 095115d..daa42d8 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
@@ -2,6 +2,7 @@
 
 import com.supwisdom.dlpay.api.bean.CardsResponse
 import com.supwisdom.dlpay.api.bean.CitizenCardInfo
+import com.supwisdom.dlpay.api.bean.QueryCardParam
 import com.supwisdom.dlpay.api.bean.UserInforResponse
 import com.supwisdom.dlpay.api.dao.CardDao
 import com.supwisdom.dlpay.api.dao.PersonDao
@@ -9,6 +10,7 @@
 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.util.StringUtil
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
 import com.supwisdom.dlpay.util.ConstantUtil
@@ -161,4 +163,13 @@
         resp.retmsg = "查询成功"
         return resp
     }
+
+    override fun getCardByCardNoOrUserid(param: QueryCardParam): TCard? {
+        if (!StringUtil.isEmpty(param.cardno)) {
+            return cardDao.findCardByCardnoAndCardtype(param.cardno,param.cardtype)
+        }else if (!StringUtil.isEmpty(param.userid)) {
+            return cardDao.findCardByUseridAndCardtype(param.userid,param.cardtype)
+        }
+        return null
+    }
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
index 3256e61..8b40673 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
@@ -2,6 +2,7 @@
 
 import com.supwisdom.dlpay.api.bean.ModifyUserParam
 import com.supwisdom.dlpay.api.bean.OpenUserParam
+import com.supwisdom.dlpay.api.bean.QueryPersonDtlParam
 import com.supwisdom.dlpay.api.dao.*
 import com.supwisdom.dlpay.api.domain.*
 import com.supwisdom.dlpay.framework.service.SystemUtilService
@@ -179,6 +180,11 @@
         return PageResult<TPersondtl>(persondtlDao.findByUseridAndStatus(userid,TradeDict.DTL_STATUS_SUCCESS,pageable))
     }
 
+    override fun findPersondtlByUseridAndMonth(param: QueryPersonDtlParam): PageResult<TPersondtl> {
+        var pageable = PageRequest.of(param.pageno - 1, param.pagesize, Sort.Direction.DESC, "transdate","transtime")
+        return PageResult<TPersondtl>(persondtlDao.findByUseridAndStatusAndTransdateBetween(param.userid,TradeDict.DTL_STATUS_SUCCESS,param.month+"00",param.month+"32",pageable))
+    }
+
     override fun findPersondtlDetailByUserid(userid: String, billno: String): TPersondtl? {
         var dtl = persondtlDao.findById(billno)
         if(dtl.isPresent){
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt
index f758859..30cb60c 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt
@@ -2,6 +2,7 @@
 
 import com.supwisdom.dlpay.api.bean.ModifyUserParam
 import com.supwisdom.dlpay.api.bean.OpenUserParam
+import com.supwisdom.dlpay.api.bean.QueryPersonDtlParam
 import com.supwisdom.dlpay.api.domain.*
 import com.supwisdom.dlpay.framework.util.PageResult
 import org.springframework.transaction.annotation.Propagation
@@ -45,6 +46,9 @@
     fun findPersondtlByUserid(userid:String, pageno :Int) : PageResult<TPersondtl>
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun findPersondtlByUseridAndMonth(param: QueryPersonDtlParam) : PageResult<TPersondtl>
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
     fun findPersondtlDetailByUserid(userid:String, billno :String) : TPersondtl?
 
 }
\ No newline at end of file
