diff --git a/src/main/java/com/supwisdom/dlpay/util/DataUtil.java b/src/main/java/com/supwisdom/dlpay/util/DataUtil.java
new file mode 100644
index 0000000..cc048a2
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/util/DataUtil.java
@@ -0,0 +1,18 @@
+package com.supwisdom.dlpay.util;
+
+import com.supwisdom.dlpay.framework.util.StringUtil;
+
+public class DataUtil {
+  public static String dataDesensitization(String data,int length) {
+    if (StringUtil.isEmpty(data)) {
+      return "";
+    }
+    int originLength = data.length();
+    String preStr = data.substring(0, length);
+    StringBuilder result = new StringBuilder(preStr);
+    for (int i = 0; i < originLength - preStr.length(); i++) {
+      result.append("X");
+    }
+    return result.toString();
+  }
+}
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 33a5dda..8dbd922 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
@@ -4,6 +4,7 @@
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
 import com.supwisdom.dlpay.framework.util.*
 import com.supwisdom.dlpay.system.service.UserDataService
+import com.supwisdom.dlpay.util.DataUtil
 import com.supwisdom.dlpay.util.WebCheckException
 import com.supwisdom.dlpay.water.bean.*
 import com.supwisdom.dlpay.water.domain.*
@@ -393,8 +394,13 @@
                 this.accdate = accdate
                 this.notacc = notacc
             }
-            collectdtlService.queryTransdtlDTOByParam(searchBean)?.let {
-                return it
+            collectdtlService.queryTransdtlDTOByParam(searchBean)?.let { pageResult ->
+                val page = pageResult.data
+                page.forEach {
+                    it.username = DataUtil.dataDesensitization(it.username,1)
+                    it.citizencardno = DataUtil.dataDesensitization(it.citizencardno,4)
+                }
+                return pageResult
             }
             return PageResult(WaterErrorCode.DATA_NOTFOUND_ERROR, "采集流水未找到")
         } catch (ex: Exception) {
@@ -650,7 +656,13 @@
                 this.accdate = accdate
             }
             accdtlService.queryAccdtlByParam(searchBean)?.let {
-                return it
+                pageResult ->
+                val page = pageResult.data
+                page.forEach {
+                    it.username = DataUtil.dataDesensitization(it.username,1)
+                    it.citizencardno = DataUtil.dataDesensitization(it.citizencardno,4)
+                }
+                return pageResult
             }
             return PageResult(WaterErrorCode.DATA_NOTFOUND_ERROR, "采集流水未找到")
         } catch (ex: Exception) {
@@ -682,7 +694,13 @@
                 this.cardno = cardno
             }
             userDataService.queryUserAccByParam(searchBean)?.let {
-                return it
+                pageResult ->
+                val page = pageResult.data
+                page.forEach {
+                    it.username = DataUtil.dataDesensitization(it.username,1)
+                    it.cardno = DataUtil.dataDesensitization(it.cardno,4)
+                }
+                return pageResult
             }
             return PageResult(WaterErrorCode.DATA_NOTFOUND_ERROR, "采集流水未找到")
         } catch (ex: Exception) {
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 b383383..1aeadc2 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/scheduler_task.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/scheduler_task.kt
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.water
 
+import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.paysdk.ApiLoginHelper
 import com.supwisdom.dlpay.paysdk.proxy.ApiLoginProxy
 import com.supwisdom.dlpay.water.pay.WaterPayAsyncTask
@@ -21,9 +22,17 @@
     @Autowired
     private lateinit var waterPayAsyncTask: WaterPayAsyncTask
 
+    @Autowired
+    private lateinit var systemUtilService: SystemUtilService
+
     @Scheduled(cron = "0 */2 * * * ?")
     @SchedulerLock(name = "dealCollectdtlAccountEntry", lockAtMostForString = "PT10M")
     fun queryCollectdtlResult() {
+        //避免出现同银行对账日期不一致，23点至1点间不执行
+        val currentime = systemUtilService.sysdatetime.hosttime.substring(0, 2).toInt()
+        if (currentime >= 23 || currentime <= 1) {
+            return
+        }
         val collectdtlList = collectdtlService.queryTransdtlNotEntry()
         if (null == collectdtlList || 0 == collectdtlList.size) {
             return
