diff --git a/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteClassServiceImpl.java b/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteClassServiceImpl.java
index dc91376..5f66c91 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteClassServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/service/impl/AtteClassServiceImpl.java
@@ -22,6 +22,7 @@
 import com.supwisdom.dlpay.system.domain.TCustType;
 import com.supwisdom.dlpay.system.page.Pagination;
 import com.supwisdom.dlpay.system.service.SystemService;
+import org.apache.xmlbeans.impl.tool.Diff;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -297,6 +298,13 @@
             return min;
     }
 
+    public static void main(String[] args) {
+        String t1=DateUtil.getNow("yyyyMMdd")+"135000";
+        String t2=DateUtil.getNow("yyyyMMdd")+"134700";
+        long diff=DateUtil.getInterval(t2,t1);
+        System.out.println("时差"+diff/(1000*60));
+    }
+
     @Override
     public Pagination getAtteDtlInfoWithPage(AttedtlSearchBean searchBean, int pageNo, int pageSize) {
         return atteClassDao.getAttedtlWithPage(searchBean,pageNo,pageSize);
@@ -362,8 +370,14 @@
                            System.out.println(detail.getTimeid()+"=nextid:"+nextid);
                            System.out.println(dtl.getAttetime());
                            System.out.println(dtl.getAttedate()+"--"+dtl.getCustid());
-                           e.printStackTrace();
+                           //e.printStackTrace();
+                           continue;
                        }
+                       if(attedate.equals("20200528")||detail.getCustid().equals("2c9780826e1c635f016e1c9eea8a3d36")){
+                           System.out.println(state);
+                           System.out.println(detail.getTimeid()+"=="+nextid+"---"+dtl.getAttetime());
+                       }
+
                        if(detail.getState()==0&&state!=0){
                            if(!refno.equals(dtl.getRefno())){
                                detail.setState(state);
@@ -372,9 +386,12 @@
                                refno=dtl.getRefno();
                            }
                        }else if(detail.getState()==2&&state==1){
-                           detail.setState(state);
-                           detail.setUpdatetime(DateUtil.getNow());
-                           atteClassDao.updateAtteDtl(detail);
+                           if(!refno.equals(dtl.getRefno())) {
+                               detail.setState(state);
+                               detail.setUpdatetime(DateUtil.getNow());
+                               refno = dtl.getRefno();
+                               atteClassDao.updateAtteDtl(detail);
+                           }
                        }
                    }
 
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TNcTime.java b/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TNcTime.java
index df751de..f446cd3 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TNcTime.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TNcTime.java
@@ -122,7 +122,7 @@
 		this.updtime = updtime;
 	}
 
-	@Column(name = "timetype",length = 4)
+	@Column(name = "timetype",precision = 4)
 	public Integer getTimetype() {
 		return timetype;
 	}
diff --git a/src/main/resources/templates/atte/timedtl/index.html b/src/main/resources/templates/atte/timedtl/index.html
index f143754..0461082 100644
--- a/src/main/resources/templates/atte/timedtl/index.html
+++ b/src/main/resources/templates/atte/timedtl/index.html
@@ -413,8 +413,8 @@
             return;
         }
         layer.confirm('你确定要刷新所选日期的流水吗?', {icon: 3, title:'请确认',offset:'30%'},function (){
+            layer.msg('请稍等!', {icon: 1, time: 1000});
             if(that.refreshflag == '0'){
-                layer.msg('请稍等!', {icon: 1, time: 1000});
                 return ;
             }
             that.refreshflag='0';
@@ -422,12 +422,13 @@
                 type:"get",
                 dataType:"json",
                 url:"[[@{/atte/adddtlbyhand?enddate=}]]"+enddate+"&startdate="+startdate,
-                success:function(ret){
-                    layer.msg('保存信息成功!', {icon: 1, time: 1000});
-                    that.refreshflag='1';
-                    timedtl_refreshThisTable();
-                }
+                // success:function(ret){
+                //     layer.msg('保存信息成功!', {icon: 1, time: 1000});
+                //     that.refreshflag='1';
+                //     timedtl_refreshThisTable();
+                // }
             })
+            return ;
         })
     }
     function dateformatter(time){
