diff --git a/src/main/java/com/supwisdom/dlpay/atte/dao/AtteRestDao.java b/src/main/java/com/supwisdom/dlpay/atte/dao/AtteRestDao.java
new file mode 100644
index 0000000..83ca9f8
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/atte/dao/AtteRestDao.java
@@ -0,0 +1,10 @@
+package com.supwisdom.dlpay.atte.dao;
+
+import com.supwisdom.dlpay.atte.domain.TAtteRest;
+
+public interface AtteRestDao {
+    public boolean  saveAtteRest(TAtteRest bean);
+    public boolean  updateAtteRest(TAtteRest bean);
+    public TAtteRest getAtteRestById(String id);
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteRestDaoImpl.java b/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteRestDaoImpl.java
new file mode 100644
index 0000000..8bdf9a5
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/atte/dao/impl/AtteRestDaoImpl.java
@@ -0,0 +1,60 @@
+package com.supwisdom.dlpay.atte.dao.impl;
+
+import com.supwisdom.dlpay.atte.dao.AtteRestDao;
+import com.supwisdom.dlpay.atte.domain.TAtteClass;
+import com.supwisdom.dlpay.atte.domain.TAtteRest;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+import java.util.List;
+
+@Service
+public class AtteRestDaoImpl implements AtteRestDao {
+    @PersistenceContext
+    EntityManager entityManager;
+
+
+    @Transactional
+    @Override
+    public boolean saveAtteRest(TAtteRest bean) {
+        boolean flag=false;
+        try {
+            entityManager.persist(bean);
+            flag=true;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return flag;
+    }
+
+    @Override
+    public boolean updateAtteRest(TAtteRest bean) {
+        boolean flag=false;
+        try {
+            entityManager.merge(bean);
+            flag=true;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return flag;
+    }
+
+    @Override
+    public TAtteRest getAtteRestById(String id) {
+        String sql=" select bean from TAtteRest bean ";
+        if(!StringUtil.isEmpty(id)){
+            sql+=" where bean.id = :sid ";
+            TypedQuery<TAtteRest> query=entityManager.createQuery(sql,TAtteRest.class);
+            query.setParameter("sid",id);
+            List<TAtteRest> list=query.getResultList();
+            if(list!=null&&list.size()>0){
+                return list.get(0);
+            }
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/atte/domain/TAtteRest.java b/src/main/java/com/supwisdom/dlpay/atte/domain/TAtteRest.java
new file mode 100644
index 0000000..f85dbc2
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/atte/domain/TAtteRest.java
@@ -0,0 +1,90 @@
+package com.supwisdom.dlpay.atte.domain;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name="t_atte_rest" )
+public class TAtteRest {
+    @Id
+    @Column(name = "ID", unique = true,  nullable = false, length = 32)
+    @GeneratedValue( strategy = GenerationType.AUTO)
+    private String id;
+    @Column(name="custid",length = 32)
+    private String custid;
+    @Column(name="rtype",length = 4)
+    private Integer rtype;
+    @Column(name="startdate", length = 8)
+    private String startdate;
+    @Column(name="enddate",length= 8)
+    private String enddate;
+    @Column(name="remark",length = 255 )
+    private String remark;
+    @Column(name="status",length = 4)
+    private String status;
+    @Column(name="updatetime",length = 14)
+    private String updatetime;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getCustid() {
+        return custid;
+    }
+
+    public void setCustid(String custid) {
+        this.custid = custid;
+    }
+
+    public Integer getRtype() {
+        return rtype;
+    }
+
+    public void setRtype(Integer rtype) {
+        this.rtype = rtype;
+    }
+
+    public String getStartdate() {
+        return startdate;
+    }
+
+    public void setStartdate(String startdate) {
+        this.startdate = startdate;
+    }
+
+    public String getEnddate() {
+        return enddate;
+    }
+
+    public void setEnddate(String enddate) {
+        this.enddate = enddate;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getUpdatetime() {
+        return updatetime;
+    }
+
+    public void setUpdatetime(String updatetime) {
+        this.updatetime = updatetime;
+    }
+}
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 4e2e2aa..df751de 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")
+	@Column(name = "timetype",length = 4)
 	public Integer getTimetype() {
 		return timetype;
 	}
diff --git a/src/main/resources/templates/atte/dtl/index.html b/src/main/resources/templates/atte/dtl/index.html
index 7d2d7f0..805dbc5 100644
--- a/src/main/resources/templates/atte/dtl/index.html
+++ b/src/main/resources/templates/atte/dtl/index.html
@@ -132,7 +132,7 @@
                     >
                     </el-table-column>
                     <el-table-column
-                            prop="devname"
+                            prop="devicename"
                             label="设备名称"
                             >
                     </el-table-column>
