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 8289e96..895263b 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java
@@ -54,7 +54,7 @@
     TPersonIdentity updateCoamount(String thirdUid,Double amount);
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-    TPersonIdentity updateAccamount(String thirdUid,Double amount);
+    TPersonIdentity updateAccamount(String thirdUid,Double amount,String billno);
 
     @Transactional(rollbackFor = Exception.class, readOnly = true)
     PageResult<UserAccountDTO> queryUserAccByParam(UserAccountSearchBean param);
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 b70140a..51177e4 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
@@ -16,7 +16,9 @@
 import com.supwisdom.dlpay.system.bean.PersonParamBean;
 import com.supwisdom.dlpay.system.service.UserDataService;
 import com.supwisdom.dlpay.water.bean.UserAccountSearchBean;
+import com.supwisdom.dlpay.water.domain.TAccdtl;
 import com.supwisdom.dlpay.water.pojo.UserAccountDTO;
+import com.supwisdom.dlpay.water.service.AccdtlService;
 import org.hibernate.query.internal.NativeQueryImpl;
 import org.hibernate.transform.Transformers;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -45,6 +47,8 @@
     private SystemUtilService systemUtilService;
     @Autowired
     private PersonIdentityDao personIdentityDao;
+    @Autowired
+    private AccdtlService accdtlService;
     @PersistenceContext
     private EntityManager em;
 
@@ -215,12 +219,20 @@
     }
 
     @Override
-    public TPersonIdentity updateAccamount(String thirdUid, Double amount) {
+    public TPersonIdentity updateAccamount(String thirdUid, Double amount,String billno) {
         TPersonIdentity personIdentity = personIdentityDao.getByThirdUid(thirdUid);
         if (null == personIdentity) {
             throw new RuntimeException("未找到用户id为" + thirdUid + "的用户");
         }
-        personIdentity.setAccamount(personIdentity.getAccamount() == null ? amount : add(personIdentity.getAccamount(),amount));
+        TAccdtl accdtl = accdtlService.findByBillno(billno);
+        if (null == accdtl) {
+            throw new RuntimeException("未找到billno为" + billno + "的入账流水");
+        }
+        if (accdtl.getUpdatedacc()==null||!accdtl.getUpdatedacc()) {
+            personIdentity.setAccamount(personIdentity.getAccamount() == null ? amount : add(personIdentity.getAccamount(),amount));
+            accdtl.setUpdatedacc(true);
+            accdtlService.saveAccdtl(accdtl);
+        }
         personIdentityDao.save(personIdentity);
         return personIdentity;
     }
diff --git a/src/main/java/com/supwisdom/dlpay/water/domain/TAccdtl.java b/src/main/java/com/supwisdom/dlpay/water/domain/TAccdtl.java
index d459b5e..32c26d2 100644
--- a/src/main/java/com/supwisdom/dlpay/water/domain/TAccdtl.java
+++ b/src/main/java/com/supwisdom/dlpay/water/domain/TAccdtl.java
@@ -56,6 +56,12 @@
     @Column(name = "refno", length = 32)
     private String refno;
 
+    /**
+     * 是否已更新用户入账金额
+     */
+    @Column(name = "updatedacc")
+    private Boolean updatedacc;
+
 
     public String getRefno() {
         return refno;
@@ -168,4 +174,12 @@
     public void setActualamount(Double actualamount) {
         this.actualamount = actualamount;
     }
+
+    public Boolean getUpdatedacc() {
+        return updatedacc;
+    }
+
+    public void setUpdatedacc(Boolean updatedacc) {
+        this.updatedacc = updatedacc;
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java b/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java
index b7e121a..8d00a27 100644
--- a/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java
+++ b/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java
@@ -127,7 +127,7 @@
                         payConfirm(accdtl);
                     } else if (TradeDict.DTL_STATUS_SUCCESS.equals(queryResult.getStatus())) {
                         //  查询得到状态为success，记录下状态
-                        userDataService.updateAccamount(accdtl.getCitizenCardno(), accdtl.getActualamount());
+                        userDataService.updateAccamount(accdtl.getCitizenCardno(), accdtl.getActualamount(),accdtl.getBillno());
                         cofirmAcc(queryResult.getStatus(), accdtl.getBillno(), accdtl.getRefno());
                     } else if (TradeDict.DTL_STATUS_FAIL.equals(queryResult.getStatus())) {
                         cofirmAcc(queryResult.getStatus(), accdtl.getBillno(), accdtl.getRefno());
@@ -205,7 +205,7 @@
         if (finishRetcode == 0) {
             accStatus = TradeDict.DTL_STATUS_SUCCESS;
             //  更新用户已入账金额
-            userDataService.updateAccamount(initAccdtl.getCitizenCardno(), initAccdtl.getActualamount());
+            userDataService.updateAccamount(initAccdtl.getCitizenCardno(), initAccdtl.getActualamount(),initAccdtl.getBillno());
         } else if (finishRetcode == TradeErrorCode.WAIT_QUERY_RESULT) {
             QueryDtlResultParam queryParam = new QueryDtlResultParam();
             queryParam.setRefno(payFinish.getRefno());
@@ -214,7 +214,7 @@
                 accStatus = queryResult.getStatus();
                 if (TradeDict.DTL_STATUS_SUCCESS.equals(accStatus)) {
                     accStatus = TradeDict.DTL_STATUS_SUCCESS;
-                    userDataService.updateAccamount(initAccdtl.getCitizenCardno(), initAccdtl.getActualamount());
+                    userDataService.updateAccamount(initAccdtl.getCitizenCardno(), initAccdtl.getActualamount(),initAccdtl.getBillno());
                 }
             } else {
                 accStatus = TradeDict.DTL_STATUS_WIP;
