diff --git a/src/main/java/com/supwisdom/dlpay/water/dao/DtlCountDateDao.java b/src/main/java/com/supwisdom/dlpay/water/dao/DtlCountDateDao.java
new file mode 100644
index 0000000..1b49a6e
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/water/dao/DtlCountDateDao.java
@@ -0,0 +1,19 @@
+package com.supwisdom.dlpay.water.dao;
+
+import com.supwisdom.dlpay.water.domain.TdtlCountDate;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Lock;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.jpa.repository.QueryHints;
+import org.springframework.stereotype.Repository;
+
+import javax.persistence.LockModeType;
+import javax.persistence.QueryHint;
+
+@Repository
+public interface DtlCountDateDao extends JpaRepository<TdtlCountDate,Integer> {
+    @Lock(LockModeType.PESSIMISTIC_WRITE)
+    @Query("select t from TdtlCountDate t where t.id=1")
+    @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value = "0")})
+    TdtlCountDate findCountDateForUpdate();
+}
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 732f124..fcd3c4d 100644
--- a/src/main/java/com/supwisdom/dlpay/water/dao/TransdtlCountDao.java
+++ b/src/main/java/com/supwisdom/dlpay/water/dao/TransdtlCountDao.java
@@ -5,9 +5,8 @@
 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);
+
+    int countByAccdate(String accdate);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/domain/TdtlCountDate.java b/src/main/java/com/supwisdom/dlpay/water/domain/TdtlCountDate.java
new file mode 100644
index 0000000..7464d24
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/water/domain/TdtlCountDate.java
@@ -0,0 +1,32 @@
+package com.supwisdom.dlpay.water.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Table(name = "tb_dtlcountdate")
+@Entity
+public class TdtlCountDate {
+    @Id
+    private Integer id;
+
+    @Column(name = "countdate",length = 8)
+    private String countdate;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getCountdate() {
+        return countdate;
+    }
+
+    public void setCountdate(String countdate) {
+        this.countdate = countdate;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/water/pay/PayInit.java b/src/main/java/com/supwisdom/dlpay/water/pay/PayInit.java
index b5af832..84fbf7a 100644
--- a/src/main/java/com/supwisdom/dlpay/water/pay/PayInit.java
+++ b/src/main/java/com/supwisdom/dlpay/water/pay/PayInit.java
@@ -2,13 +2,12 @@
 
 import com.supwisdom.dlpay.api.bean.ApiVersionResponse;
 import com.supwisdom.dlpay.framework.service.BusinessparaService;
-import com.supwisdom.dlpay.framework.util.Constants;
 import com.supwisdom.dlpay.framework.util.WaterBudinessConstants;
 import com.supwisdom.dlpay.paysdk.ApiLoginHelper;
 import com.supwisdom.dlpay.paysdk.proxy.ApiCommonProxy;
 import com.supwisdom.dlpay.paysdk.proxy.ApiLoginProxy;
+import com.supwisdom.dlpay.water.service.CollectdtlService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.stereotype.Component;
@@ -26,9 +25,9 @@
     @Autowired
     private BusinessparaService businessparaService;
 
-    private  String appid;
+    private String appid;
 
-    private  String secret;
+    private String secret;
 
     @Autowired
     private ApiLoginProxy apiLoginProxy;
@@ -36,14 +35,22 @@
     @Autowired
     private ApiCommonProxy apiCommonProxy;
 
+    @Autowired
+    private CollectdtlService collectdtlService;
+
     @PostConstruct
     public void login() {
-        appid=businessparaService.findByParakey(WaterBudinessConstants.WATER_APPID).getParaval();
-        secret=businessparaService.findByParakey(WaterBudinessConstants.WATER_SECRET).getParaval();
+        appid = businessparaService.findByParakey(WaterBudinessConstants.WATER_APPID).getParaval();
+        secret = businessparaService.findByParakey(WaterBudinessConstants.WATER_SECRET).getParaval();
         ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
-        helper.login(appid,secret);
+        helper.login(appid, secret);
         ApiVersionResponse version = apiCommonProxy.apiVersion();
         assertThat("get version error " + version.getException(),
                 version.getVersion(), notNullValue());
     }
+
+    @PostConstruct
+    public void initDtlCountDate() {
+        collectdtlService.initDtlCountDate();
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java b/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java
index 683c3f9..58bfa28 100644
--- a/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java
+++ b/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java
@@ -5,7 +5,6 @@
 import com.supwisdom.dlpay.water.UserAuthRequest;
 import com.supwisdom.dlpay.water.bean.TransdtlCountSearchBean;
 import com.supwisdom.dlpay.water.domain.TCollectdtl;
-import com.supwisdom.dlpay.water.domain.TTransdtlCount;
 import com.supwisdom.dlpay.water.pojo.TCollectdtlDTO;
 import com.supwisdom.dlpay.water.bean.TransdtlSearchBean;
 import com.supwisdom.dlpay.water.pojo.TTransdtlCountVO;
@@ -40,5 +39,8 @@
     TCollectdtl findByCobillnoForUpdate(Integer cobillno);
 
     @Transactional(rollbackFor = Exception.class)
-    void generateCountdtl(String accdate);
+    void generateCountdtl();
+
+    @Transactional(rollbackFor = Exception.class)
+    void initDtlCountDate();
 }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/water/controller/water_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/water/controller/water_controller.kt
index 8821de6..33a5dda 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/controller/water_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/controller/water_controller.kt
@@ -568,7 +568,7 @@
     @GetMapping("/areapara/loadbindadd")
     fun loadBindView(model: Model): String {
         model.addAttribute("grouplist", tAreaparaService.queryAllAreaparaGroups())
-        return "/system/areaparabind/form"
+        return "system/areaparabind/form"
     }
 
     @PostMapping("/areapara/addbindareapara")
diff --git a/src/main/kotlin/com/supwisdom/dlpay/water/scheduler_task.kt b/src/main/kotlin/com/supwisdom/dlpay/water/scheduler_task.kt
index 8f1ffe6..f546b16 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/scheduler_task.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/scheduler_task.kt
@@ -40,12 +40,10 @@
     @Autowired
     private lateinit var collectdtlService: CollectdtlService
 
-    @Autowired
-    private lateinit var systemUtilsService: SystemUtilService
     @Scheduled(cron = "0 0 1 * * ?")
     @SchedulerLock(name = "generateCountdtl",lockAtMostForString = "PT10M")
     fun generateCountdtl() {
-        collectdtlService.generateCountdtl(systemUtilsService.sysdatetime.hostdate)
+        collectdtlService.generateCountdtl()
     }
 }
 
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 37f69c5..02268b9 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
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.water.service
 
 import com.supwisdom.dlpay.exception.TransactionProcessException
+import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.PageResult
 import com.supwisdom.dlpay.framework.util.StringUtil
 import com.supwisdom.dlpay.framework.util.TradeDict
@@ -12,8 +13,10 @@
 import com.supwisdom.dlpay.water.domain.TCollectdtl
 import com.supwisdom.dlpay.water.pojo.TCollectdtlDTO
 import com.supwisdom.dlpay.water.bean.TransdtlSearchBean
+import com.supwisdom.dlpay.water.dao.DtlCountDateDao
 import com.supwisdom.dlpay.water.dao.TransdtlCountDao
 import com.supwisdom.dlpay.water.domain.TTransdtlCount
+import com.supwisdom.dlpay.water.domain.TdtlCountDate
 import com.supwisdom.dlpay.water.pojo.TTransdtlCountDTO
 import com.supwisdom.dlpay.water.pojo.TTransdtlCountVO
 import mu.KotlinLogging
@@ -21,14 +24,13 @@
 import org.hibernate.transform.Transformers
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.data.domain.PageRequest
-import org.springframework.data.jpa.domain.Specification
 import org.springframework.stereotype.Service
 import java.lang.IllegalStateException
 import java.lang.RuntimeException
 import java.math.BigInteger
-import java.util.ArrayList
+import java.text.SimpleDateFormat
+import java.util.*
 import javax.persistence.EntityManager
-import javax.persistence.criteria.Predicate
 
 @Service
 class CollectdtlServiceImpl : CollectdtlService {
@@ -44,6 +46,12 @@
     @Autowired
     private lateinit var transdtlCountDao: TransdtlCountDao
 
+    @Autowired
+    private lateinit var dtlCountDateDao: DtlCountDateDao
+
+    @Autowired
+    private lateinit var systemUtilsService: SystemUtilService
+
 
     override fun createNewTransdtl(dtl: TCollectdtl): TCollectdtl {
         collectdtlDao.save(dtl)
@@ -217,8 +225,8 @@
             countQuery.setParameter("maxaccdate", timerange[1])
         }
         if (!StringUtil.isEmpty(param.devicename)) {
-            query.setParameter("devicename", "%"+param.devicename.trim()+"%")
-            countQuery.setParameter("devicename", "%"+param.devicename.trim()+"%")
+            query.setParameter("devicename", "%" + param.devicename.trim() + "%")
+            countQuery.setParameter("devicename", "%" + param.devicename.trim() + "%")
         }
         param.areano?.let {
             query.setParameter("areano", param.areano)
@@ -229,7 +237,7 @@
         query.unwrap(NativeQueryImpl::class.java).setResultTransformer(Transformers.aliasToBean(TTransdtlCountVO::class.java))
         val list = query.resultList as List<TTransdtlCountVO>
         val count = countQuery.singleResult as BigInteger
-        return PageResult(count.longValueExact(),list)
+        return PageResult(count.longValueExact(), list)
     }
 
     override fun queryTransdtlNotEntry(): List<TCollectdtl>? {
@@ -240,18 +248,29 @@
         return collectdtlDao.findByCobillnoForUpdate(cobillno) ?: throw RuntimeException("采集流水号:" + cobillno + "未找到")
     }
 
-    override fun generateCountdtl(accdate: String?) {
-        val countList=transdtlCountDao.findByAccdate(accdate)
-        if (countList != null && countList.size!=0) {
-            logger.error { accdate+"的统计流水已生成!" }
+    override fun generateCountdtl() {
+        val dtlcountDate = dtlCountDateDao.findCountDateForUpdate()
+        val currentDate = systemUtilsService.sysdatetime.hostdate
+        if (dtlcountDate.countdate.toInt() >= currentDate.toInt()) {
+            logger.error { "统计流水日期<${dtlcountDate.countdate}>应小于当前日期<$currentDate>" }
             return
         }
-        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 count = daysBetween(dtlcountDate.countdate, currentDate)
+        var accdate = dtlcountDate.countdate
+        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"
+        for (i in 1..count) {
+            if (accdate.toInt() >= currentDate.toInt()) {
+                logger.error { "统计流水日期<$accdate>应小于当前日期<$currentDate>" }
+                return
+            }
+            if (transdtlCountDao.countByAccdate(accdate)>0) {
+                logger.error { accdate + "的统计流水已生成!" }
+                return
+            }
+            val list = ArrayList<TTransdtlCount>(300)
             val query = em.createNativeQuery(querySql)
             query.setParameter("accdate", accdate)
             query.unwrap(NativeQueryImpl::class.java).setResultTransformer(Transformers.aliasToBean(TTransdtlCountDTO::class.java))
@@ -268,8 +287,38 @@
                 list.add(transCount)
             }
             transdtlCountDao.saveAll(list)
-        } finally {
-            list.clear()
+            accdate = nextDay(accdate)
+        }
+        dtlcountDate.countdate=accdate
+        dtlCountDateDao.save(dtlcountDate)
+    }
+
+    private fun daysBetween(date1: String, date2: String): Int {
+        val sdf = SimpleDateFormat("yyyyMMdd")
+        val cal = Calendar.getInstance()
+        cal.time = sdf.parse(date1)
+        val time1 = cal.timeInMillis
+        cal.time = sdf.parse(date2)
+        val time2 = cal.timeInMillis
+        val between = (time2 - time1) / (1000 * 3600 * 24)
+        return Integer.parseInt(between.toString())
+    }
+
+    private fun nextDay(date: String): String {
+        val sdf = SimpleDateFormat("yyyyMMdd")
+        val cal = Calendar.getInstance()
+        cal.time = sdf.parse(date)
+        cal.add(Calendar.DATE, 1)
+        return sdf.format(cal.time)
+    }
+
+    override fun initDtlCountDate() {
+        val dtlCountDate = dtlCountDateDao.findCountDateForUpdate()
+        if (dtlCountDate == null) {
+            val countDate = TdtlCountDate()
+            countDate.id = 1
+            countDate.countdate = systemUtilsService.sysdatetime.hostdate
+            dtlCountDateDao.save(countDate)
         }
     }
 }
\ No newline at end of file
