diff --git a/src/main/java/com/supwisdom/dlpay/api/dao/PersonIdentityDao.java b/src/main/java/com/supwisdom/dlpay/api/dao/PersonIdentityDao.java
index 6ee3e99..a5384e2 100644
--- a/src/main/java/com/supwisdom/dlpay/api/dao/PersonIdentityDao.java
+++ b/src/main/java/com/supwisdom/dlpay/api/dao/PersonIdentityDao.java
@@ -1,10 +1,16 @@
 package com.supwisdom.dlpay.api.dao;
 
 import com.supwisdom.dlpay.api.domain.TPersonIdentity;
+import com.supwisdom.dlpay.framework.domain.TPerson;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
 @Repository
 public interface PersonIdentityDao extends JpaRepository<TPersonIdentity, String> {
   TPersonIdentity getByThirdUid(String thirdUid);
+
+  @Query(value = "select * from TB_PERSON_IDENTITY where userid =:userid",nativeQuery = true)
+  TPersonIdentity getByUserid(@Param("userid")String userid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java b/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java
index b61b293..1de4f1d 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TPersonIdentity.java
@@ -5,7 +5,8 @@
 import javax.persistence.*;
 
 @Entity
-@Table(name = "TB_PERSON_IDENTITY")
+@Table(name = "TB_PERSON_IDENTITY",
+    indexes = {@Index(name = "person_userid_idx", columnList = "userid")})
 public class TPersonIdentity {
   //  市民卡号
   @Id
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TPerson.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TPerson.java
index a2e361c..8b79e4c 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TPerson.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TPerson.java
@@ -1,7 +1,5 @@
 package com.supwisdom.dlpay.framework.domain;
 
-import org.hibernate.annotations.GenericGenerator;
-
 import javax.persistence.*;
 
 @Entity
@@ -10,8 +8,6 @@
         @Index(name = "person_idno_uk", unique = true, columnList = "idtype,idno")})
 public class TPerson {
   @Id
-  @GenericGenerator(name = "idGenerator", strategy = "uuid")
-  @GeneratedValue(generator = "idGenerator")
   @Column(name = "USERID", nullable = false, length = 32)
   private String userid;
 
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java b/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java
index 918cb87..8289e96 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.system.service;
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.api.bean.UserInforResponse;
 import com.supwisdom.dlpay.api.domain.TAccount;
 import com.supwisdom.dlpay.api.domain.TPersonIdentity;
 import com.supwisdom.dlpay.api.domain.TPointsAccount;
@@ -9,6 +10,7 @@
 import com.supwisdom.dlpay.system.bean.PersonParamBean;
 import com.supwisdom.dlpay.water.bean.UserAccountSearchBean;
 import com.supwisdom.dlpay.water.pojo.UserAccountDTO;
+import org.jetbrains.annotations.Nullable;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -45,6 +47,9 @@
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
     TPersonIdentity getPersonIdentityByThirdUid(String thirdUid);
 
+    @Transactional(rollbackFor = Exception.class)
+    TPersonIdentity getPersonIdentityByThirdUidOrUserid(String thirdUid,String userid);
+
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     TPersonIdentity updateCoamount(String thirdUid,Double amount);
 
@@ -54,5 +59,11 @@
     @Transactional(rollbackFor = Exception.class, readOnly = true)
     PageResult<UserAccountDTO> queryUserAccByParam(UserAccountSearchBean param);
 
+    @Transactional(rollbackFor = Exception.class)
+    TPersonIdentity saveUserInfoFromPayApi(UserInforResponse payApiUser, TPersonIdentity localIdentity,TPerson person);
+
     double subtract(Double minuend, Double subtractor);
+
+    @Transactional(rollbackFor = Exception.class)
+    TPerson savePerson(UserInforResponse userInfo);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
index ea422fd..b70140a 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.system.service.impl;
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.api.bean.UserInforResponse;
 import com.supwisdom.dlpay.api.dao.AccountDao;
 import com.supwisdom.dlpay.api.dao.PersonDao;
 import com.supwisdom.dlpay.api.dao.PersonIdentityDao;
@@ -189,14 +190,20 @@
 
     @Override
     public TPersonIdentity getPersonIdentityByThirdUid(String thirdUid) {
-        TPersonIdentity personIdentity = personIdentityDao.getByThirdUid(thirdUid);
-        if (personIdentity != null) {
-            return personIdentity;
-        }
-        return null;
+        return personIdentityDao.getByThirdUid(thirdUid);
     }
 
-    @Override
+  @Override
+  public TPersonIdentity getPersonIdentityByThirdUidOrUserid(String thirdUid, String userid) {
+      TPersonIdentity personIdentity = personIdentityDao.getByThirdUid(thirdUid);
+      if (personIdentity != null) {
+        return personIdentity;
+      } else {
+        return personIdentityDao.getByUserid(userid);
+      }
+  }
+
+  @Override
     public TPersonIdentity updateCoamount(String thirdUid, Double amount) {
         TPersonIdentity personIdentity = personIdentityDao.getByThirdUid(thirdUid);
         if (null == personIdentity) {
@@ -249,7 +256,47 @@
         return new PageResult<>(count.longValue(), list);
     }
 
-    public double subtract(Double minuend,Double subtractor){
+    @Override
+    public TPersonIdentity saveUserInfoFromPayApi(UserInforResponse payApiUser, TPersonIdentity localIdentity,TPerson person) {
+        String dateTime = systemUtilService.getSysdatetime().getHostdatetime();
+        if (null == localIdentity) {
+            TPersonIdentity identity = buildNwIdentity(person, payApiUser, dateTime);
+            identity.setCoamount(0.0);
+            identity.setAccamount(0.0);
+            return personIdentityDao.save(identity);
+        } else {
+            if (payApiUser.getCardno().equals(localIdentity.getThirdUid())) {
+                localIdentity.setCardphyId(payApiUser.getCardphyid());
+                localIdentity.setStatus(payApiUser.getCardstatus());
+                localIdentity.setPerson(person);
+                return personIdentityDao.save(localIdentity);
+            } else {
+                TPersonIdentity identity = buildNwIdentity(person, payApiUser, dateTime);
+                identity.setCoamount(localIdentity.getCoamount());
+                identity.setAccamount(localIdentity.getAccamount());
+                personIdentityDao.delete(localIdentity);
+                return personIdentityDao.save(identity);
+            }
+        }
+    }
+
+    @Override
+    public TPerson savePerson(UserInforResponse userInfo) {
+        Optional<TPerson> optional = personDao.findById(userInfo.getUserid());
+        String dateTime = systemUtilService.getSysdatetime().getHostdatetime();
+        if (optional.isPresent()) {
+            TPerson person = optional.get();
+            savePersonInfo(person, userInfo, dateTime);
+            return personDao.save(person);
+        }else {
+            TPerson person = new TPerson();
+            person.setUserid(userInfo.getUserid());
+            savePersonInfo(person, userInfo, dateTime);
+            return personDao.save(person);
+        }
+    }
+
+    public double subtract(Double minuend, Double subtractor){
         if (minuend == null) {
             minuend = 0.0;
         }
@@ -266,4 +313,23 @@
                 new BigDecimal(String.valueOf(d2))
         ).doubleValue();
     }
+
+    private void savePersonInfo(TPerson person, UserInforResponse payApiUser,String dateTime) {
+        person.setIdtype(payApiUser.getIdtype());
+        person.setLastsaved(dateTime);
+        person.setMobile(payApiUser.getPhone());
+        person.setName(payApiUser.getUsername());
+        person.setSex(payApiUser.getSex());
+        person.setStatus(payApiUser.getTransstatus());
+    }
+
+    private TPersonIdentity buildNwIdentity(TPerson person, UserInforResponse payApiUser,String dateTime) {
+        TPersonIdentity identity = new TPersonIdentity();
+        identity.setThirdUid(payApiUser.getCardno());
+        identity.setCardphyId(payApiUser.getCardphyid());
+        identity.setCreatetime(dateTime);
+        identity.setStatus(payApiUser.getCardstatus());
+        identity.setPerson(person);
+        return identity;
+    }
 }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt b/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
index 22591b6..68dbea4 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
@@ -41,18 +41,18 @@
     }
 }
 
-class QueryUserParam : APIRequestParam() {
-    @Sign
-    var userid: String? = null  // 用户ID二选一 (两者都传取userid)
-    @Sign
-    var uid: String? = null    // 用户ID二选一
-
-    override fun checkParam(): Boolean {
-        if (StringUtil.isEmpty(userid) && StringUtil.isEmpty(uid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "用户唯一号不能为空")
-
-        return true
-    }
-}
+//class QueryUserParam : APIRequestParam() {
+//    @Sign
+//    var userid: String? = null  // 用户ID二选一 (两者都传取userid)
+//    @Sign
+//    var uid: String? = null    // 用户ID二选一
+//
+//    override fun checkParam(): Boolean {
+//        if (StringUtil.isEmpty(userid) && StringUtil.isEmpty(uid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "用户唯一号不能为空")
+//
+//        return true
+//    }
+//}
 
 class ModifyUserParam : APIRequestParam() {
     @Sign
diff --git a/src/main/kotlin/com/supwisdom/dlpay/water/controller/api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/water/controller/api_controller.kt
index 3ba083b..f433ab1 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/controller/api_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/controller/api_controller.kt
@@ -94,9 +94,22 @@
     @PostMapping("/card/purseinit")
     fun cardPurseInit(param: CardPayRequest): ResponseEntity<Any> {
         try {//1. 通过 citizenCardno 检查用户以及合法性
-            val personIdentity = userDataService.getPersonIdentityByThirdUid(param.citizenCardno)
-                    ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
-                            .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, "未查询到您的身份信息"))
+            val userInfo = userProxy.querybycardno(QueryUserParam().apply {
+                this.citizencardno = param.citizenCardno
+            })
+            if (userInfo.retcode != 0) {
+                logger.error { "获取卡号为${param.citizenCardno}的用户信息失败,错误信息:${userInfo.retmsg}" }
+                return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, userInfo.retmsg))
+            }
+            if (userInfo.cardstatus != TradeDict.STATUS_NORMAL || userInfo.transstatus != TradeDict.STATUS_NORMAL) {
+                return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, "用户消费状态异常"))
+            }
+            val person = userDataService.savePerson(userInfo)
+            val localIdentity = userDataService.
+                    getPersonIdentityByThirdUidOrUserid(param.citizenCardno,userInfo.userid)
+            val personIdentity = userDataService.saveUserInfoFromPayApi(userInfo, localIdentity,person)
             val notaccAmount = userDataService.subtract(personIdentity.coamount, personIdentity.accamount)
             //2. 通过 deviceno 查询设备费率参数
             val todayAmount = collectdtlService.getTodayAmount(personIdentity.person.userid) ?: 0.0
@@ -275,14 +288,21 @@
             if (userInfo.cardstatus != TradeDict.STATUS_NORMAL || userInfo.transstatus != TradeDict.STATUS_NORMAL) {
                 return ModelAndView("error/500").addObject("errorMsg", "用户消费状态异常")
             }
+            val person = userDataService.savePerson(userInfo)
+            val localIdentity = userDataService.
+                    getPersonIdentityByThirdUidOrUserid(null,userInfo.userid)
+            val personIdentity = userDataService.saveUserInfoFromPayApi(userInfo, localIdentity,person)
             val collectDtl = collectdtlService.pretendAsCard(userInfo, cobillno)
             val deviceParam = deviceService.getParaMapByDeviceno(collectDtl.deviceno)
-            val personIdentity = userDataService.getPersonIdentityByThirdUid(userInfo.cardno)
-                    ?:  return ModelAndView("error/500").addObject("errorMsg", "未查询到您的身份信息")
             val notaccAmount = userDataService.subtract(personIdentity.coamount, personIdentity.accamount)
             if (notaccAmount > deviceParam[WaterDeviceParam.permitNotAccAmount]!!.toInt()) {
                 return ModelAndView("error/500").
-                        addObject("errorMsg", "你的未入账金额为${notaccAmount},已超过最大限额:${deviceParam[WaterDeviceParam.permitNotAccAmount]!!.toInt()}")
+                        addObject("errorMsg", "你的未入账金额为$notaccAmount,已超过最大限额:${deviceParam[WaterDeviceParam.permitNotAccAmount]!!.toInt()}")
+            }
+            val todayAmount = collectdtlService.getTodayAmount(personIdentity.person.userid) ?: 0.0
+            if (todayAmount > deviceParam[WaterDeviceParam.dayAmountLimit]!!.toInt()) {
+                return ModelAndView("error/500").
+                        addObject("errorMsg", "今日消费$todayAmount,已达每日限额")
             }
             if (collectDtl.status != TradeDict.DTL_STATUS_INIT) {
                 return ModelAndView("error/500").addObject("errorMsg", "流水状态异常")
