市民卡查询时返回的信息字段修改
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