diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryCardInfo.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryCardInfo.java
new file mode 100644
index 0000000..11f9437
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryCardInfo.java
@@ -0,0 +1,26 @@
+package com.supwisdom.dlpay.api.bean;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+@JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })
+public class QueryCardInfo {
+  private String id;
+  private String cardno;
+  private String cardtype;
+  private String cardphyid;
+  private String status;
+  private String transStatus;
+  private String expiredate;
+  private Boolean signed = false;
+  private String userid;
+  private String lastsaved;
+  private String tenantid = "";
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryCardResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryCardResponse.java
new file mode 100644
index 0000000..61bb14f
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryCardResponse.java
@@ -0,0 +1,12 @@
+package com.supwisdom.dlpay.api.bean;
+
+import lombok.*;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class QueryCardResponse extends ApiResponse {
+  QueryCardInfo card;
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryPersonInfo.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryPersonInfo.java
new file mode 100644
index 0000000..0426249
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryPersonInfo.java
@@ -0,0 +1,30 @@
+package com.supwisdom.dlpay.api.bean;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+@JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })
+public class QueryPersonInfo {
+  private String userid;
+  private String name;
+  private String sex;
+  private String status;
+  private String idtype;
+  private String idno;
+  private String country;
+  private String nation;
+  private String email;
+  private String tel;
+  private String mobile;
+  private String addr;
+  private String zipcode;
+  private String lastsaved;
+  private String tenantid = "";
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryPersonResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryPersonResponse.java
new file mode 100644
index 0000000..035ff25
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryPersonResponse.java
@@ -0,0 +1,12 @@
+package com.supwisdom.dlpay.api.bean;
+
+import lombok.*;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+@ToString
+public class QueryPersonResponse extends ApiResponse {
+  QueryPersonInfo person;
+}
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 2aece8f..45ea831 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
@@ -2,11 +2,12 @@
 
 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;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import java.util.Map;
+
 @FeignClient(value = "userProxy", url = "${payapi.url}")
 public interface UserProxy {
   @PostMapping("/api/user/open")
@@ -37,11 +38,21 @@
   ApiResponse getUserPoints(@RequestBody UserPointsParam param);
 
   @PostMapping("/api/user/queryPersonDtl")
-  ApiResponse queryPersonDtl(@RequestBody QueryPersonDtlParam param);
+  Map<String, Object> queryPersonDtl(@RequestBody QueryPersonDtlParam param);
+
+  @PostMapping("/api/user/billcount")
+  Map<String, Object> billCount(@RequestParam("userid") String userid,@RequestParam("month") String month);
 
   @PostMapping("/api/user/queryPerson")
-  ApiResponse queryPerson(@RequestParam("userid") String userid);
+  QueryPersonResponse queryPerson(@RequestParam("userid") String userid);
 
   @PostMapping("/api/user/queryCard")
-  ApiResponse queryCard(@RequestBody QueryCardParam param);
+  QueryCardResponse queryCard(@RequestBody QueryCardParam param);
+
+  @PostMapping("/api/user/updateCardSign")
+  ApiResponse updateCardSign(@RequestParam("cardno") String cardno,@RequestParam("signed") Boolean signed);
+
+  @PostMapping("/api/user/updateCardTransStatus")
+  ApiResponse updateCardTransStatus(@RequestParam("cardno") String cardno,@RequestParam("status") String status);
+
 }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/DtlGroupResultBean.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/DtlGroupResultBean.kt
new file mode 100644
index 0000000..0e7ab74
--- /dev/null
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/DtlGroupResultBean.kt
@@ -0,0 +1,8 @@
+package com.supwisdom.dlpay.api.bean
+
+import java.math.BigDecimal
+
+class DtlGroupResultBean {
+    var transtype:String = ""
+    var amount:BigDecimal = BigDecimal(0)
+}
\ No newline at end of file
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 04a0a82..e0100f2 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
@@ -6,18 +6,15 @@
 import com.supwisdom.dlpay.api.service.KafkaSendMsgService
 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 com.supwisdom.dlpay.system.bean.LevelBean
 import com.supwisdom.dlpay.system.service.PointsService
+import org.apache.commons.beanutils.BeanUtils
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
 import org.springframework.web.bind.annotation.*
 import java.net.URLDecoder
-import javax.servlet.http.HttpServletRequest
-import javax.servlet.http.HttpServletResponse
 
 @RestController
 @RequestMapping("/api/user")
@@ -203,21 +200,64 @@
                 .success("ok"))
     }
 
+    @PostMapping("/billcount")
+    fun billCount(userid:String,month:String): ResponseEntity<Any> {
+        val page = useService.findDtlMonthCountByUserid(userid,month)
+        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()
+                ?:return ResponseEntity.ok(ResponseBodyBuilder.create()
                         .fail(500, "未找到[userid=${userid}]的用户"))
-        return  ResponseEntity.ok(ResponseBodyBuilder.create().data("data", person)
-                .success("ok"))
+        return  ResponseEntity.ok(ResponseBodyBuilder.create()
+                .success(QueryPersonResponse().apply{
+                    this.retcode = 0
+                    this.retmsg = "ok"
+                    val personInfo = QueryPersonInfo()
+                    BeanUtils.copyProperties(personInfo,person)
+                    this.person = personInfo
+                },"ok"))
     }
 
     @PostMapping("/queryCard")
     fun queryCard(@RequestBody param: QueryCardParam): ResponseEntity<Any> {
         val card = cardService.getCardByCardNoOrUserid(param)
-                ?:ResponseEntity.ok(ResponseBodyBuilder.create()
+                ?:return ResponseEntity.ok(ResponseBodyBuilder.create()
                         .fail(500, "未找到指定条件的卡片"))
-        return  ResponseEntity.ok(ResponseBodyBuilder.create().data("data", card)
-                .success("ok"))
+        return  ResponseEntity.ok(ResponseBodyBuilder.create()
+                .success(QueryCardResponse().apply {
+                    this.retcode = 0
+                    this.retmsg = "ok"
+                    val cardInfo = QueryCardInfo()
+                    BeanUtils.copyProperties(cardInfo,card)
+                    this.card = cardInfo
+                },"ok"))
+    }
+
+    @PostMapping("/updateCardSign")
+    fun updateCardSign(cardno:String,signed:Boolean):ResponseEntity<Any>{
+        val ret = cardService.updateCardSign(cardno, signed)
+        return if(ret.retcode==0){
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .success(ret,"ok"))
+        }else{
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(ret.retcode, ret.retmsg))
+        }
+    }
+
+    @PostMapping("/updateCardTransStatus")
+    fun updateCardTransStatus(cardno:String,status:String):ResponseEntity<Any>{
+        val ret = cardService.updateCardTransStatus(cardno, status)
+        return if(ret.retcode==0){
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .success(ret,"ok"))
+        }else{
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(ret.retcode, ret.retmsg))
+        }
     }
 }
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 7330e29..e99baab 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,5 +1,6 @@
 package com.supwisdom.dlpay.api.service
 
+import com.supwisdom.dlpay.api.bean.ApiResponse
 import com.supwisdom.dlpay.api.bean.CardsResponse
 import com.supwisdom.dlpay.api.bean.QueryCardParam
 import com.supwisdom.dlpay.api.bean.UserInforResponse
@@ -26,4 +27,10 @@
 
     @Transactional(rollbackFor = arrayOf(Exception::class), readOnly = true)
     fun getCardByCardNoOrUserid(param: QueryCardParam): TCard?
+
+    @Transactional(rollbackFor = arrayOf(Exception::class))
+    fun updateCardSign(cardno:String,signed:Boolean): ApiResponse
+
+    @Transactional(rollbackFor = arrayOf(Exception::class))
+    fun updateCardTransStatus(cardno:String,status:String): ApiResponse
 }
\ 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 daa42d8..9a0c135 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,9 +1,6 @@
 package com.supwisdom.dlpay.api.service.impl
 
-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.bean.*
 import com.supwisdom.dlpay.api.dao.CardDao
 import com.supwisdom.dlpay.api.dao.PersonDao
 import com.supwisdom.dlpay.api.domain.TCard
@@ -172,4 +169,34 @@
         }
         return null
     }
+
+    override fun updateCardSign(cardno: String, signed: Boolean): ApiResponse {
+        val result = ApiResponse().apply {
+            this.retcode = 1
+            this.retmsg = "卡片不存在"
+        }
+        val card = cardDao.findCardByCardnoAndCardtype(cardno, ConstantUtil.CARDTYPE_BANKCARD)
+                ?: return result
+        card.signed = signed
+        cardDao.save(card)
+        return result.apply {
+            this.retcode = 0
+            this.retmsg = "ok"
+        }
+    }
+
+    override fun updateCardTransStatus(cardno: String, status: String): ApiResponse {
+        val result = ApiResponse().apply {
+            this.retcode = 1
+            this.retmsg = "卡片不存在"
+        }
+        val card = cardDao.findCardByCardnoAndCardtype(cardno, ConstantUtil.CARDTYPE_BANKCARD)
+                ?: return result
+        card.transStatus = status
+        cardDao.save(card)
+        return result.apply {
+            this.retcode = 0
+            this.retmsg = "ok"
+        }
+    }
 }
\ 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 8b40673..ce708b1 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
@@ -1,18 +1,25 @@
 package com.supwisdom.dlpay.api.service.impl
 
+import com.supwisdom.dlpay.api.bean.DtlGroupResultBean
 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
 import com.supwisdom.dlpay.api.service.UserService
 import com.supwisdom.dlpay.exception.TransactionProcessException
+import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.*
+import org.hibernate.query.NativeQuery
+import org.hibernate.transform.Transformers
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.data.domain.PageRequest
 import org.springframework.data.domain.Sort
 import org.springframework.stereotype.Service
+import java.math.BigDecimal
+import javax.persistence.EntityManager
+import javax.persistence.PersistenceContext
+import javax.persistence.Query
 
 /**
  * Created by shuwei on 2019/4/15.
@@ -31,6 +38,8 @@
     private lateinit var systemUtilService: SystemUtilService
     @Autowired
     private lateinit var persondtlDao: PersondtlDao
+    @PersistenceContext
+    private lateinit var em: EntityManager
 
 
     override fun registerUser(param: OpenUserParam): TPerson {
@@ -185,6 +194,31 @@
         return PageResult<TPersondtl>(persondtlDao.findByUseridAndStatusAndTransdateBetween(param.userid,TradeDict.DTL_STATUS_SUCCESS,param.month+"00",param.month+"32",pageable))
     }
 
+    @Suppress("JpaQueryApiInspection")
+    override fun findDtlMonthCountByUserid(userid: String, month: String): Map<String, Any>? {
+        val totalSql = "select sum(cast(amount as decimal(18,2))) total from tb_persondtl where userid =:userid and transdate between :startdate and :enddate and status = 'success' and tradeflag = 'out'"
+        val totalQuery: Query = em.createNativeQuery(totalSql)
+        totalQuery.setParameter("userid", userid)
+        totalQuery.setParameter("startdate", month + "00")
+        totalQuery.setParameter("enddate", month + "32")
+        val list = totalQuery.resultList
+        val result = HashMap<String,Any>()
+        if (list.isNotEmpty()&&list[0]!=null) {
+            result["total"] = list[0] as BigDecimal
+            val groupSql = "select transdesc transtype,sum(cast(amount as decimal(18,2))) amount from tb_persondtl where userid =:userid and transdate between :startdate and :enddate and status = 'success' and tradeflag = 'out' group by transdesc"
+            val groupQuery = em.createNativeQuery(groupSql)
+            groupQuery.setParameter("userid", userid)
+            groupQuery.setParameter("startdate", month + "00")
+            groupQuery.setParameter("enddate", month + "32")
+            val nativeQuery = groupQuery.unwrap(NativeQuery::class.java)
+            nativeQuery.setResultTransformer(Transformers.aliasToBean(DtlGroupResultBean::class.java))
+            result["group"] = nativeQuery.resultList
+        } else {
+            result["total"] = 0
+        }
+        return result
+    }
+
     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 30cb60c..26fc2ff 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
@@ -49,6 +49,9 @@
     fun findPersondtlByUseridAndMonth(param: QueryPersonDtlParam) : PageResult<TPersondtl>
 
     @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), readOnly = true)
     fun findPersondtlDetailByUserid(userid:String, billno :String) : TPersondtl?
 
 }
\ No newline at end of file
