diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CardsResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CardsResponse.java
index 733947a..f33e0e8 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CardsResponse.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CardsResponse.java
@@ -12,5 +12,5 @@
 @AllArgsConstructor
 @NoArgsConstructor
 public class CardsResponse extends ApiResponse {
-  List cards;
+  List<CitizenCardInfo> cards;
 }
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CitizenCardInfo.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CitizenCardInfo.java
new file mode 100644
index 0000000..d99daf7
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/CitizenCardInfo.java
@@ -0,0 +1,26 @@
+package com.supwisdom.dlpay.api.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+public class CitizenCardInfo {
+  private String cardno;
+  private String cardphyid;
+  private String expiredate;
+  private String cardstatus;
+  private String transstatus;
+
+  private String userid;
+  private String username;
+  private String sex;
+  private String idtype;
+  private String idno;
+  private String phone;
+  private String bankcardno;
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryCardsParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryCardsParam.java
index e621b78..9c024e3 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryCardsParam.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QueryCardsParam.java
@@ -3,6 +3,7 @@
 import com.supwisdom.dlpay.api.APIRequestParam;
 import com.supwisdom.dlpay.api.annotation.Sign;
 import com.supwisdom.dlpay.api.exception.RequestParamCheckException;
+import com.supwisdom.dlpay.api.util.DateUtil;
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.commons.lang3.StringUtils;
@@ -18,6 +19,12 @@
 
   @Override
   public boolean checkParam() throws RequestParamCheckException {
+    if (!DateUtil.checkDatetimeValid(starttime, DateUtil.DATETIME_FMT))
+      throw new RequestParamCheckException("起始时间为空或格式错误");
+    if (!DateUtil.checkDatetimeValid(endtime, DateUtil.DATETIME_FMT))
+      throw new RequestParamCheckException("结束时间为空或格式错误");
+    if (DateUtil.compareDatetime(endtime, starttime, DateUtil.DATETIME_FMT) < 0)
+      throw new RequestParamCheckException("结束时间不能小于起始时间");
     return true;
   }
 }
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserInforResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserInforResponse.java
index e15252e..1271f26 100644
--- a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserInforResponse.java
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/UserInforResponse.java
@@ -11,17 +11,16 @@
 @NoArgsConstructor
 public class UserInforResponse extends ApiResponse {
   private String userid;
+  private String username;
+  private String sex;
+  private String idtype;
+  private String idno;
+  private String phone;
+
   private String cardno;
+  private String cardphyid;
+  private String expiredate;
+  private String bankcardno;
   private String cardstatus;
   private String transstatus;
-  private String expiredate;
-  private String name;
-  private String status;
-  private String cardphyid;
-
-  private String bankcardno;
-  private String bankcardstatus;
-  private String banktransstatus;
-  private String bankexpiredate;
-  private String bankcardphyid;
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/CardDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/CardDao.java
index f2b7290..7781be6 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/CardDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/CardDao.java
@@ -19,6 +19,9 @@
   @Query("from TCard t where t.userid=?1 and t.cardtype=?2 and t.status='normal' ")
   TCard findCardByUseridAndCardtype(String userid, String cardtype);
 
+  @Query("from TCard t where t.userid=?1 and t.cardtype=?2 and t.cardphyid=?3 ")
+  TCard findBankcardByCitizencard(String userid, String cardtype, String cardphyid);
+
   @Query("from TCard t where cardtype='citizencard' and t.lastsaved>?1 and t.lastsaved<=?2 ")
   List<TCard> findCitizencardByLastsaved(String startdate, String enddate);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
index 4ef27de..a587685 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
@@ -14,12 +14,19 @@
 import com.supwisdom.dlpay.system.service.RoleService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.annotation.AuthenticationPrincipal;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 
@@ -196,7 +203,9 @@
     @PostMapping("/dosetpwd")
     @ResponseBody
     public JsonResult dosetpwd(@RequestParam String curpwd,
-                               @RequestParam String newpwd, @RequestParam String renewpwd) {
+                               @RequestParam String newpwd,
+                               @RequestParam String renewpwd,
+                               HttpServletRequest request, HttpServletResponse response) {
         if (StringUtil.isEmpty(curpwd)
                 || StringUtil.isEmpty(newpwd)
                 || StringUtil.isEmpty(renewpwd)) {
@@ -219,6 +228,9 @@
         }
         operator.setOperpwd(encoder.encode(newpwd));
         operatorService.saveOperator(operator);
+
+        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
+        new SecurityContextLogoutHandler().logout(request, response, auth);
         return JsonResult.ok("密码修改成功，请重新登录");
     }
 }
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 c43ae9d..12fb6e6 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,6 +1,7 @@
 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.UserInforResponse
 import com.supwisdom.dlpay.api.dao.CardDao
 import com.supwisdom.dlpay.api.dao.PersonDao
@@ -8,12 +9,15 @@
 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.ResponseBodyBuilder
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
 import com.supwisdom.dlpay.util.ConstantUtil
+import org.hibernate.query.internal.NativeQueryImpl
+import org.hibernate.transform.Transformers
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.stereotype.Service
+import javax.persistence.EntityManager
+import javax.persistence.PersistenceContext
 
 @Service
 class CardServiceImpl : CardService {
@@ -22,6 +26,9 @@
     @Autowired
     lateinit var personDao: PersonDao
 
+    @PersistenceContext
+    private lateinit var entityManager: EntityManager
+
     override fun getBankcardByUserid(userid: String): TCard? {
         return cardDao.findCardByUseridAndCardtype(userid, ConstantUtil.CARDTYPE_BANKCARD)
     }
@@ -46,47 +53,57 @@
 
     override fun getPersonByCardno(citizencardno: String?, bankcardno: String?): UserInforResponse {
         var resp = UserInforResponse()
-        var cityCard:TCard?
+        var cityCard: TCard?
         if (!citizencardno.isNullOrEmpty()) {
             cityCard = cardDao.findCardByCardnoAndCardtype(citizencardno, ConstantUtil.CARDTYPE_CITIZENCARD)
-            if(cityCard==null){
-                resp.retcode=1
+            if (cityCard == null) {
+                resp.retcode = 1
                 resp.retmsg = "市民卡不存在"
                 return resp
             }
-            val bankcard = cardDao.findCardByUseridAndCardtype(cityCard.userid, ConstantUtil.CARDTYPE_BANKCARD)
-            if(bankcard!=null){
+            val bankcard = cardDao.findBankcardByCitizencard(cityCard.userid, ConstantUtil.CARDTYPE_BANKCARD, cityCard.cardphyid)
+            if (bankcard != null) {
                 resp.bankcardno = bankcard.cardno
             }
-        }else {
-            resp.retcode=1
+        } else {
+            resp.retcode = 1
             resp.retmsg = "参数错误"
             return resp
         }
         resp.cardno = cityCard.cardno
+        resp.cardphyid = cityCard.cardphyid
+        resp.expiredate = cityCard.expiredate
         resp.cardstatus = cityCard.status
         resp.transstatus = cityCard.transStatus
-        resp.expiredate = cityCard.expiredate
-        resp.cardphyid = cityCard.cardphyid
         val person = personDao.findByUserid(cityCard.userid)
         if (person != null) {
-            resp.retcode=0
-            resp.name = person.name
+            resp.retcode = 0
+            resp.username = person.name
             resp.userid = person.userid
-            resp.status = person.status
+            resp.sex = person.sex
+            resp.idtype = person.idtype
+            resp.idno = person.idno
+            resp.phone = person.mobile
             return resp
         }
-        resp.retcode=1
+        resp.retcode = 1
         resp.retmsg = "用户不存在"
         return resp
     }
 
     override fun getCardsByLastsaveDate(startdate: String, enddate: String): CardsResponse {
         var resp = CardsResponse()
-        var ret = cardDao.findCitizencardByLastsaved(startdate,enddate)
+//        var ret = cardDao.findCitizencardByLastsaved(startdate,enddate)
+        val query = entityManager.createNativeQuery("select a.cardno,a.cardphyid,a.expiredate,a.status as cardstatus,a.trans_status as transstatus,a.userid,b.name as username,b.sex,b.idtype,b.idno,b.mobile as phone,c.cardno as bankcardno \n" +
+                "from tb_card a left join tb_person b on a.userid=b.userid left join tb_card c on a.userid=c.userid and a.cardphyid=c.cardphyid and c.cardtype='bankcard' \n" +
+                "where a.cardtype='citizencard' and a.lastsaved>:starttime and a.lastsaved<=:endtime order by a.lastsaved ")
+        query.setParameter("starttime", startdate)
+        query.setParameter("endtime", enddate)
+        query.unwrap(NativeQueryImpl::class.java).setResultTransformer(Transformers.aliasToBean(CitizenCardInfo::class.java))
+        val list = query.resultList as List<CitizenCardInfo>
         resp.retcode=0
         resp.retmsg="OK"
-        resp.cards = ret
+        resp.cards = list
         return resp
     }
 }
\ No newline at end of file
