diff --git a/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteClassDaoImpl.java b/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteClassDaoImpl.java
index 7262bad..4ee8c12 100644
--- a/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteClassDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteClassDaoImpl.java
@@ -610,8 +610,8 @@
         if(StringUtil.isEmpty(custid)||StringUtil.isEmpty(attedate)){
             return null;
         }
-        String sql=" select bean from TAtteDtl bean where bean.status=1 and  bean.attedate= :adate and bean.custid= :cid ";
-
+        String sql=" select bean from TAtteDtl bean left join TNcTime nc on bean.timeid =nc.timeid where bean.status=1 and  bean.attedate= :adate and bean.custid= :cid ";
+            sql+=" order by bean.attedate asc,nc.btime asc";
         Query query=entityManager.createQuery(sql,TAtteDtl.class);
         query.setParameter("adate",attedate);
         query.setParameter("cid",custid);
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 b622d79..cbeb19b 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
@@ -323,25 +323,32 @@
         for(AtteDtl dtl:list){
           List<TAtteDtl> details=atteClassDao.getDetailList(dtl.getCustid(),attedate) ;
            if(details!=null){
-               for(TAtteDtl detail:details){
-                int state=getState(detail.getTimeid(),dtl.getAttetime());
-                if(detail.getState()==0){
-                    detail.setState(state);
-                    detail.setUpdatetime(DateUtil.getNow());
-                    atteClassDao.updateAtteDtl(detail);
-                }else if(detail.getState()==2&&state==1){
-                    detail.setState(state);
-                    detail.setUpdatetime(DateUtil.getNow());
-                    atteClassDao.updateAtteDtl(detail);
-                }
-               }
+
+                   for(int i=0;i<details.size();i++){
+                       TAtteDtl detail=details.get(i);
+                       Integer nextid=null;
+                       if((i==0 || i==2)&&details.size()==4){
+                           nextid=details.get(i+1).getTimeid();//考离时间段
+                       }
+                       int state=getState(detail.getTimeid(),dtl.getAttetime(),nextid);
+                       if(detail.getState()==0){
+                           detail.setState(state);
+                           detail.setUpdatetime(DateUtil.getNow());
+                           atteClassDao.updateAtteDtl(detail);
+                       }else if(detail.getState()==2&&state==1){
+                           detail.setState(state);
+                           detail.setUpdatetime(DateUtil.getNow());
+                           atteClassDao.updateAtteDtl(detail);
+                       }
+                   }
+
            }
         }
         return true;
     }
 
     // 判断流水状态 0-未打卡 1-正常 2-迟到/早退 3-请假
-    public int getState(Integer timeid,String attetime){
+    public int getState(Integer timeid,String attetime,Integer nextid){
         int flag=0;
         TNcTime time=ncTimeDao.findByTimeId(timeid);
         if(time==null){
@@ -353,8 +360,11 @@
         int emin=getDiffMin(attetime,etime);
         int d_min=0;
         if(time.getTimetype()==1){   //考到
-          TBusinesspara b_para= businessparaDao.findByParakey("atte_bmin");
-          d_min=Integer.parseInt(b_para.getParaval());
+            //考离
+            TNcTime nexttime=ncTimeDao.findByTimeId(nextid);
+            String lasttime=nexttime.getEtime().replace(":","")+"00";
+
+          d_min=getDiffMin(etime,lasttime);
              if(bmin>0){  //
                  flag=0;
              }else {
@@ -367,15 +377,9 @@
                  }
              }
         }else if(time.getTimetype()==2){ //考离
-            TBusinesspara e_para= businessparaDao.findByParakey("atte_emin");
-            d_min=Integer.parseInt(e_para.getParaval());
-            if(bmin>d_min){
-                flag=0;
-            }else if(bmin<d_min&&bmin>0){
-                flag=2;
-            }else if(bmin<0&&emin>0){
+            if(bmin<=0&&emin>=0){
                 flag=1;
-            }else{
+            }else {
                 flag=0;
             }
         }else{
diff --git a/src/main/resources/templates/atte/timedtl/index.html b/src/main/resources/templates/atte/timedtl/index.html
index 9b353a0..ed80a73 100644
--- a/src/main/resources/templates/atte/timedtl/index.html
+++ b/src/main/resources/templates/atte/timedtl/index.html
@@ -130,16 +130,24 @@
                     >
                     </el-table-column>
                     <el-table-column
-                            prop="state"
                             label="考勤状态"
-                            :formatter="statefor"
                             >
+                        <template scope="scope">
+                            <span v-if="scope.row.state=='0'" class="layui-badge layui-bg-orange">未打卡</span>
+                            <span v-if="scope.row.state=='1'" class="layui-badge layui-bg-green">正常</span>
+                            <span v-if="scope.row.state=='2'" class="layui-badge layui-bg-red">迟到</span>
+                            <span v-if="scope.row.state=='3'" class="layui-badge layui-bg-gray">请假</span>
+                        </template>
                     </el-table-column>
                     <el-table-column
-                            prop="oldstate"
                             label="原始状态"
-                            :formatter="oldstatefor"
                     >
+                        <template scope="scope">
+                            <span v-if="scope.row.oldstate=='0'" class="layui-badge layui-bg-orange">未打卡</span>
+                            <span v-if="scope.row.oldstate=='1'" class="layui-badge layui-bg-green">正常</span>
+                            <span v-if="scope.row.oldstate=='2'" class="layui-badge layui-bg-red">迟到</span>
+                            <span v-if="scope.row.oldstate=='3'" class="layui-badge layui-bg-gray">请假</span>
+                        </template>
                     </el-table-column>
                     <el-table-column
                             prop="custtypeid"
@@ -222,7 +230,7 @@
             pageSize:10,
             totSize:0,
             currentRow: null,
-            stategrplist:[{value:0,label:'未打卡'},{value:1,label:'正常'},{value:2,label:'迟到'},{value:3,label:'请假'},{value:4,label:'旷工'},],
+            stategrplist:[{value:0,label:'未打卡'},{value:1,label:'正常'},{value:2,label:'迟到'},{value:3,label:'请假'},],
             attedtlform:{
                 startdate:Date.now(),
                 enddate:Date.now(),
