diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
index 30b15b1..d43abcf 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
@@ -342,4 +342,24 @@
   public static Boolean sameDay(Timestamp d1, Timestamp d2) {
     return (compareDay(d1, d2) == 0);
   }
+
+  /**
+   * 将给定时间增加指定小时数
+   */
+  public static String addDateHour(String day, int hour){
+    SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
+    Date date = null;
+    try {
+      date = format.parse(day);
+    } catch (Exception ex) {
+      ex.printStackTrace();
+    }
+    if (date == null)
+      return "";
+    Calendar cal = Calendar.getInstance();
+    cal.setTime(date);
+    cal.add(Calendar.HOUR, hour);// 24小时制
+    date = cal.getTime();
+    return format.format(date);
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/WaterBudinessConstants.java b/src/main/java/com/supwisdom/dlpay/framework/util/WaterBudinessConstants.java
index df2419d..a0cbaf5 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/WaterBudinessConstants.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/WaterBudinessConstants.java
@@ -7,4 +7,6 @@
     public final static String WATER_SHOP_ACCNO = "water_shopaccno";
     public final static String WATER_APPID = "water_appid";
     public final static String WATER_SECRET = "water_secret";
+    public final static String WATER_DTLCREDIT_MAXCOUNT = "water_dtlcredit_maxcount"; // 单笔流水每日最大入账次数
+    public final static String WATER_DTLCREDIT_INTERVALHOUR = "water_dtlcredit_intervalhour"; // 单笔流水入账间隔小时数
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/dao/CollectdtlDao.java b/src/main/java/com/supwisdom/dlpay/water/dao/CollectdtlDao.java
index c0095f5..fb8ac41 100644
--- a/src/main/java/com/supwisdom/dlpay/water/dao/CollectdtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/water/dao/CollectdtlDao.java
@@ -24,10 +24,8 @@
     @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value = "0")})
     TCollectdtl findByEntrynoForUpdate(String entryno);
 
-    @Lock(LockModeType.PESSIMISTIC_WRITE)
-    @Query("select t from TCollectdtl  t where t.status='wip'")
-    @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value = "0")})
-    List<TCollectdtl> findWipCollectdtl(Pageable pageable);
+    @Query("select t from TCollectdtl  t where t.status='wip' and t.lastCredit<?1 and t.nextCreditTime<?2")
+    List<TCollectdtl> findWipCollectdtl(String maxCredit,String currentTime,Pageable pageable);
 
     TCollectdtl findByCobillnoAndDeviceno(Integer cobillno, String deviceno);
 
diff --git a/src/main/java/com/supwisdom/dlpay/water/domain/TCollectdtl.java b/src/main/java/com/supwisdom/dlpay/water/domain/TCollectdtl.java
index 09c43f2..d1e2226 100644
--- a/src/main/java/com/supwisdom/dlpay/water/domain/TCollectdtl.java
+++ b/src/main/java/com/supwisdom/dlpay/water/domain/TCollectdtl.java
@@ -7,6 +7,7 @@
 @Table(name = "tb_collectdtl",
     indexes = {@Index(name = "collectdtl_userid", columnList = "userid"),
         @Index(name = "collectdtl_status", columnList = "transdate, status"),
+        @Index(name = "collectdtl_creditable",columnList = "status,lastcredit,nextcredittime"),
         @Index(name = "collectdtl_acc", columnList = "accdate")})
 @SequenceGenerator(name = "SEQ_COLLECT_BILLNO", sequenceName = "SEQ_COLLECT_BILLNO", allocationSize = 1)
 public class TCollectdtl {
@@ -65,6 +66,12 @@
   @Column(name = "cardphyid",length = 60)
   private String cardPhyId;
 
+  @Column(name = "lastcredit",length = 9)
+  private String lastCredit;
+
+  @Column(name = "nextcredittime",length = 14)
+  private String nextCreditTime;
+
   public String getCardPhyId() {
     return cardPhyId;
   }
@@ -193,4 +200,19 @@
     this.entryno = entryno;
   }
 
+  public String getLastCredit() {
+    return lastCredit;
+  }
+
+  public void setLastCredit(String lastCredit) {
+    this.lastCredit = lastCredit;
+  }
+
+  public String getNextCreditTime() {
+    return nextCreditTime;
+  }
+
+  public void setNextCreditTime(String nextCreditTime) {
+    this.nextCreditTime = nextCreditTime;
+  }
 }
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 d5f60d1..3e623de 100644
--- a/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java
+++ b/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.water.pay;
 
 import com.supwisdom.dlpay.api.bean.*;
+import com.supwisdom.dlpay.framework.data.SystemDateTime;
 import com.supwisdom.dlpay.framework.service.BusinessparaService;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
 import com.supwisdom.dlpay.framework.util.*;
@@ -18,6 +19,10 @@
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
 import static org.hamcrest.Matchers.equalTo;
 
 
@@ -50,6 +55,22 @@
     @Async("waterPay")
     public void waterPay(Integer cobillno) {
         TCollectdtl collectdtl = collectdtlService.findByCobillnoForUpdate(cobillno);
+        String lastCredit = collectdtl.getLastCredit();
+        SystemDateTime dateTime = systemUtilService.getSysdatetime();
+        String currentDate = dateTime.getHostdate();
+        String lastDate = lastCredit.substring(0, 8);
+        int count = Integer.valueOf(lastCredit.substring(8, 9));
+        String currentCredit;
+        if (currentDate.equals(lastDate)) {
+            currentCredit = currentDate + (count + 1);
+        }else {
+            currentCredit = currentDate + "1";
+        }
+        String intervalHour = businessparaService.findByParakey(WaterBudinessConstants.WATER_DTLCREDIT_INTERVALHOUR).getParaval();
+        String nextTime = DateUtil.addDateHour(dateTime.getHostdatetime(), Integer.valueOf(intervalHour));
+        collectdtl.setNextCreditTime(nextTime);
+        collectdtl.setLastCredit(currentCredit);
+        collectdtlService.saveCollectDtl(collectdtl);
         if (!TradeDict.DTL_STATUS_WIP.equals(collectdtl.getStatus())) {
             logger.error("待入账的采集流水" + cobillno + "状态不正确");
             return;
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 a4546c3..09b2e30 100644
--- a/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java
+++ b/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java
@@ -50,4 +50,7 @@
 
     @Transactional(rollbackFor = Exception.class)
     Double getTodayAmount(String userid);
+
+    @Transactional(rollbackFor = Exception.class)
+    TCollectdtl saveCollectDtl(TCollectdtl dtl);
 }
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 f08f563..3ba083b 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
@@ -97,10 +97,6 @@
             val personIdentity = userDataService.getPersonIdentityByThirdUid(param.citizenCardno)
                     ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
                             .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, "未查询到您的身份信息"))
-            if (personIdentity.cardphyId == null || personIdentity.cardphyId != param.cardphyid) {
-                return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, "物理卡号不匹配"))
-            }
             val notaccAmount = userDataService.subtract(personIdentity.coamount, personIdentity.accamount)
             //2. 通过 deviceno 查询设备费率参数
             val todayAmount = collectdtlService.getTodayAmount(personIdentity.person.userid) ?: 0.0
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 e68eeb7..b383383 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/scheduler_task.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/scheduler_task.kt
@@ -21,7 +21,7 @@
     @Autowired
     private lateinit var waterPayAsyncTask: WaterPayAsyncTask
 
-    @Scheduled(cron = "0 */10 * * * ?")
+    @Scheduled(cron = "0 */2 * * * ?")
     @SchedulerLock(name = "dealCollectdtlAccountEntry", lockAtMostForString = "PT10M")
     fun queryCollectdtlResult() {
         val collectdtlList = collectdtlService.queryTransdtlNotEntry()
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 74e6124..5269151 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
@@ -2,11 +2,9 @@
 
 import com.supwisdom.dlpay.api.bean.UserInforResponse
 import com.supwisdom.dlpay.exception.TransactionProcessException
+import com.supwisdom.dlpay.framework.service.BusinessparaService
 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
-import com.supwisdom.dlpay.framework.util.WaterErrorCode
+import com.supwisdom.dlpay.framework.util.*
 import com.supwisdom.dlpay.water.StartWaterRequest
 import com.supwisdom.dlpay.water.UploadRecordRequest
 import com.supwisdom.dlpay.water.bean.TransdtlCountSearchBean
@@ -53,6 +51,12 @@
     @Autowired
     private lateinit var systemUtilsService: SystemUtilService
 
+    @Autowired
+    private lateinit var businessparaService: BusinessparaService
+
+    @Autowired
+    private lateinit var systemUtilService: SystemUtilService
+
 
     override fun createNewTransdtl(dtl: TCollectdtl): TCollectdtl {
         collectdtlDao.save(dtl)
@@ -63,12 +67,20 @@
         val dtl = collectdtlDao.findByCobillnoForUpdate(record.cobillno)
                 ?: throw TransactionProcessException(WaterErrorCode.DATA_NOTFOUND_ERROR,
                         "交易订单号不存在")
+        val amount = record.amount
         if (record.transtatus == "2") {
             dtl.status = TradeDict.DTL_STATUS_FAIL
         } else if (record.transtatus == "1") {
-            dtl.status = TradeDict.DTL_STATUS_WIP
+            if (0 != amount) {
+                val dateTime = systemUtilService.sysdatetime
+                dtl.lastCredit = dateTime.hostdate + "0" // 0代表已尝试入账次数
+                dtl.nextCreditTime = dateTime.hostdatetime
+                dtl.status = TradeDict.DTL_STATUS_WIP
+            }else{
+                dtl.status = TradeDict.DTL_STATUS_SUCCESS
+            }
         }
-        dtl.amount = record.amount / 100.0
+        dtl.amount = amount / 100.0
         dtl.waterSumHundredLitre = record.flowsensors
         dtl.uploadTime = record.transdate + record.transtime
         dtl.uploadStatus = true
@@ -252,7 +264,11 @@
     }
 
     override fun queryTransdtlNotEntry(): List<TCollectdtl>? {
-        return collectdtlDao.findWipCollectdtl(PageRequest.of(0, 10))
+        val count = businessparaService.findByParakey(WaterBudinessConstants.WATER_DTLCREDIT_MAXCOUNT).paraval
+        val dateTime = systemUtilsService.sysdatetime
+        val date = dateTime.hostdate
+        val time = dateTime.hostdatetime
+        return collectdtlDao.findWipCollectdtl(date + count,time,PageRequest.of(0, 10))
     }
 
     override fun findByCobillnoForUpdate(cobillno: Int?): TCollectdtl {
@@ -340,4 +356,8 @@
         query.setParameter("date",systemUtilsService.sysdatetime.hostdate)
         return query.singleResult as Double?
     }
+
+    override fun saveCollectDtl(dtl: TCollectdtl): TCollectdtl?{
+        return collectdtlDao.save(dtl)
+    }
 }
\ No newline at end of file
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index df98ad0..f1d41c3 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -60,6 +60,8 @@
 INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_shopaccno', '2000000010');
 INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_appid', '700001');
 INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_secret', '5f788ce433ec44f299351cdf7f137e81');
+INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_dtlcredit_maxcount', '3');
+INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_dtlcredit_intervalhour', '1');
 
 
 INSERT INTO "tb_area"("areano", "address", "areaname", "available", "arealevel", "parentid", "remarks") VALUES (1, '测试路1号', '测试区域', 1, 1, 0, '测试');
