diff --git a/build.gradle b/build.gradle
index 7c8ec76..49b97db 100644
--- a/build.gradle
+++ b/build.gradle
@@ -94,7 +94,7 @@
     compileOnly 'org.projectlombok:lombok:1.18.8'
     annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
     
-    compile 'com.supwisdom:payapi-sdk:a315360'
+    compile 'com.supwisdom:payapi-sdk:55725ca'
     
 //    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
     testImplementation 'org.springframework.boot:spring-boot-starter-test'
diff --git a/src/main/java/com/supwisdom/dlpay/water/dao/TransdtlCountDao.java b/src/main/java/com/supwisdom/dlpay/water/dao/TransdtlCountDao.java
index 131e3cb..732f124 100644
--- a/src/main/java/com/supwisdom/dlpay/water/dao/TransdtlCountDao.java
+++ b/src/main/java/com/supwisdom/dlpay/water/dao/TransdtlCountDao.java
@@ -5,6 +5,9 @@
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface TransdtlCountDao extends JpaRepository<TTransdtlCount, String>, JpaSpecificationExecutor<TTransdtlCount> {
+    List<TTransdtlCount> findByAccdate(String accdate);
 }
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 17696e6..324c43e 100644
--- a/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java
+++ b/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java
@@ -53,6 +53,10 @@
     @Async("waterPay")
     public void waterPay(Integer cobillno) {
         TCollectdtl collectdtl = collectdtlService.findByCobillnoForUpdate(cobillno);
+        if (!TradeDict.DTL_STATUS_WIP.equals(collectdtl.getStatus())) {
+            logger.error("待入账的采集流水"+cobillno+"状态不正确");
+            return;
+        }
         if (TradeDict.PAY_MODE_CARD.equals(collectdtl.getMode())) {
             waterCardPay(collectdtl);
         } else if (TradeDict.PAY_MODE_QRCODE.equals(collectdtl.getMode())) {
diff --git a/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt b/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt
index fe2fbd7..37f69c5 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt
@@ -241,26 +241,35 @@
     }
 
     override fun generateCountdtl(accdate: String?) {
-        val querySql = "select t3.deviceno,t3.areano,coalesce(t4.accdate,:accdate) accdate,t4.mode,coalesce(t4.amount,0) amount,coalesce(t4.water,0) water,coalesce(t4.count,0) " +
-                "count from tb_device t3 LEFT JOIN (select t1.deviceno,t1.accdate,t1.mode,t1.amount,t1.water,t1.count,t2.areano from (select deviceno,accdate,mode,sum(amount) amount,sum(water_in_100ml) water,count(cobillno) count " +
-                "from tb_collectdtl where accdate=:accdate and status = 'success' group by deviceno,mode,accdate) t1 LEFT JOIN " +
-                "(select deviceno,areano from tb_device) t2 on t1.deviceno=t2.deviceno) t4 on t3.deviceno=t4.deviceno"
-        val query = em.createNativeQuery(querySql)
-        query.setParameter("accdate", accdate)
-        query.unwrap(NativeQueryImpl::class.java).setResultTransformer(Transformers.aliasToBean(TTransdtlCountDTO::class.java))
-        val countDTOList = query.resultList as List<TTransdtlCountDTO>
-        val list = ArrayList<TTransdtlCount>()
-        countDTOList.forEach {
-            val transCount = TTransdtlCount()
-            transCount.accdate = it.accdate
-            transCount.amount = it.amount
-            transCount.water = it.water.toInt()
-            transCount.count = it.count.toInt()
-            transCount.mode = it.mode
-            transCount.areano = it.areano
-            transCount.deviceno = it.deviceno
-            list.add(transCount)
+        val countList=transdtlCountDao.findByAccdate(accdate)
+        if (countList != null && countList.size!=0) {
+            logger.error { accdate+"的统计流水已生成!" }
+            return
         }
-        transdtlCountDao.saveAll(list)
+        val list = ArrayList<TTransdtlCount>(300)
+        try {
+            val querySql = "select t3.deviceno,t3.areano,coalesce(t4.accdate,:accdate) accdate,t4.mode,coalesce(t4.amount,0) amount,coalesce(t4.water,0) water,coalesce(t4.count,0) " +
+                    "count from tb_device t3 LEFT JOIN (select t1.deviceno,t1.accdate,t1.mode,t1.amount,t1.water,t1.count,t2.areano from (select deviceno,accdate,mode,sum(amount) amount,sum(water_in_100ml) water,count(cobillno) count " +
+                    "from tb_collectdtl where accdate=:accdate and status = 'success' group by deviceno,mode,accdate) t1 LEFT JOIN " +
+                    "(select deviceno,areano from tb_device) t2 on t1.deviceno=t2.deviceno) t4 on t3.deviceno=t4.deviceno"
+            val query = em.createNativeQuery(querySql)
+            query.setParameter("accdate", accdate)
+            query.unwrap(NativeQueryImpl::class.java).setResultTransformer(Transformers.aliasToBean(TTransdtlCountDTO::class.java))
+            val countDTOList = query.resultList as List<TTransdtlCountDTO>
+            countDTOList.forEach {
+                val transCount = TTransdtlCount()
+                transCount.accdate = it.accdate
+                transCount.amount = it.amount
+                transCount.water = it.water.toInt()
+                transCount.count = it.count.toInt()
+                transCount.mode = it.mode
+                transCount.areano = it.areano
+                transCount.deviceno = it.deviceno
+                list.add(transCount)
+            }
+            transdtlCountDao.saveAll(list)
+        } finally {
+            list.clear()
+        }
     }
 }
\ No newline at end of file
