diff --git a/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConfPeopleApiBean.java b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConfPeopleApiBean.java
new file mode 100644
index 0000000..04f3b90
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConfPeopleApiBean.java
@@ -0,0 +1,31 @@
+package com.supwisdom.dlpay.conference.api.bean;
+
+public class ConfPeopleApiBean {
+    private String custname;
+    private String attstatus;
+    private String atttime;
+
+    public String getCustname() {
+        return custname;
+    }
+
+    public void setCustname(String custname) {
+        this.custname = custname;
+    }
+
+    public String getAttstatus() {
+        return attstatus;
+    }
+
+    public void setAttstatus(String attstatus) {
+        this.attstatus = attstatus;
+    }
+
+    public String getAtttime() {
+        return atttime;
+    }
+
+    public void setAtttime(String atttime) {
+        this.atttime = atttime;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConfPeopleReq.java b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConfPeopleReq.java
new file mode 100644
index 0000000..2091501
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConfPeopleReq.java
@@ -0,0 +1,23 @@
+package com.supwisdom.dlpay.conference.api.bean;
+
+
+public class ConfPeopleReq {
+    private String devphyid;
+    private String confdate;
+
+    public String getDevphyid() {
+        return devphyid;
+    }
+
+    public void setDevphyid(String devphyid) {
+        this.devphyid = devphyid;
+    }
+
+    public String getConfdate() {
+        return confdate;
+    }
+
+    public void setConfdate(String confdate) {
+        this.confdate = confdate;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConfPeopleResp.java b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConfPeopleResp.java
new file mode 100644
index 0000000..0cc2561
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConfPeopleResp.java
@@ -0,0 +1,28 @@
+package com.supwisdom.dlpay.conference.api.bean;
+
+import com.supwisdom.dlpay.api.bean.ApiResponse;
+import com.supwisdom.dlpay.conference.bean.ConfpeopleShowBean;
+import com.supwisdom.dlpay.conference.domain.TConfPeople;
+
+import java.util.List;
+
+public class ConfPeopleResp extends ApiResponse {
+    private Integer count;
+    private List<ConfPeopleApiBean> peoplelist;
+
+    public Integer getCount() {
+        return count;
+    }
+
+    public void setCount(Integer count) {
+        this.count = count;
+    }
+
+    public List<ConfPeopleApiBean> getPeoplelist() {
+        return peoplelist;
+    }
+
+    public void setPeoplelist(List<ConfPeopleApiBean> peoplelist) {
+        this.peoplelist = peoplelist;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConferenceApiBean.java b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConferenceApiBean.java
new file mode 100644
index 0000000..5a9db15
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConferenceApiBean.java
@@ -0,0 +1,87 @@
+package com.supwisdom.dlpay.conference.api.bean;
+
+public class ConferenceApiBean {
+    private Integer confid;
+    private String confname;
+    private String conftype;
+    private String confdate;
+    private String status;
+    private String starttime;
+    private String endtime;
+    private String attendtime;
+    private String confarea;
+
+
+    public Integer getConfid() {
+        return confid;
+    }
+
+    public void setConfid(Integer confid) {
+        this.confid = confid;
+    }
+
+    public String getConfname() {
+        return confname;
+    }
+
+    public void setConfname(String confname) {
+        this.confname = confname;
+    }
+
+
+    public String getStarttime() {
+        return starttime;
+    }
+
+    public void setStarttime(String starttime) {
+        this.starttime = starttime;
+    }
+
+    public String getEndtime() {
+        return endtime;
+    }
+
+    public void setEndtime(String endtime) {
+        this.endtime = endtime;
+    }
+
+    public String getConftype() {
+        return conftype;
+    }
+
+    public void setConftype(String conftype) {
+        this.conftype = conftype;
+    }
+
+    public String getConfdate() {
+        return confdate;
+    }
+
+    public void setConfdate(String confdate) {
+        this.confdate = confdate;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getConfarea() {
+        return confarea;
+    }
+
+    public void setConfarea(String confarea) {
+        this.confarea = confarea;
+    }
+
+    public String getAttendtime() {
+        return attendtime;
+    }
+
+    public void setAttendtime(String attendtime) {
+        this.attendtime = attendtime;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConferenceReq.java b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConferenceReq.java
index 3c32907..10d3dda 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConferenceReq.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConferenceReq.java
@@ -2,8 +2,18 @@
 
 
 public class ConferenceReq  {
+    private String devphyid;
     private String confdate;
 
+
+    public String getDevphyid() {
+        return devphyid;
+    }
+
+    public void setDevphyid(String devphyid) {
+        this.devphyid = devphyid;
+    }
+
     public String getConfdate() {
         return confdate;
     }
diff --git a/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConferenceResp.java b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConferenceResp.java
index c6c5714..c17e861 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConferenceResp.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConferenceResp.java
@@ -7,7 +7,7 @@
 
 public class ConferenceResp extends ApiResponse {
     private Integer count;
-    private List<TConference> conflist;
+    private List<ConferenceApiBean> conflist;
 
 
     public Integer getCount() {
@@ -18,11 +18,11 @@
         this.count = count;
     }
 
-    public List<TConference> getConflist() {
+    public List<ConferenceApiBean> getConflist() {
         return conflist;
     }
 
-    public void setConflist(List<TConference> conflist) {
+    public void setConflist(List<ConferenceApiBean> conflist) {
         this.conflist = conflist;
     }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConfrateReq.java b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConfrateReq.java
new file mode 100644
index 0000000..8afd15d
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConfrateReq.java
@@ -0,0 +1,17 @@
+package com.supwisdom.dlpay.conference.api.bean;
+
+
+public class ConfrateReq {
+    private Integer confid;
+
+
+    public Integer getConfid() {
+        return confid;
+    }
+
+    public void setConfid(Integer confid) {
+        this.confid = confid;
+    }
+
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConfrateResp.java b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConfrateResp.java
new file mode 100644
index 0000000..019644a
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConfrateResp.java
@@ -0,0 +1,35 @@
+package com.supwisdom.dlpay.conference.api.bean;
+
+import com.supwisdom.dlpay.api.bean.ApiResponse;
+
+import java.util.List;
+
+public class ConfrateResp extends ApiResponse {
+    private Integer totcnt;
+    private Integer actualcnt;
+    private Float attrate;
+
+    public Integer getTotcnt() {
+        return totcnt;
+    }
+
+    public void setTotcnt(Integer totcnt) {
+        this.totcnt = totcnt;
+    }
+
+    public Integer getActualcnt() {
+        return actualcnt;
+    }
+
+    public void setActualcnt(Integer actualcnt) {
+        this.actualcnt = actualcnt;
+    }
+
+    public Float getAttrate() {
+        return attrate;
+    }
+
+    public void setAttrate(Float attrate) {
+        this.attrate = attrate;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/conference/api/controller/ConerenceApiController.java b/src/main/java/com/supwisdom/dlpay/conference/api/controller/ConerenceApiController.java
index 6bf54fa..4942238 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/api/controller/ConerenceApiController.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/api/controller/ConerenceApiController.java
@@ -1,13 +1,17 @@
 package com.supwisdom.dlpay.conference.api.controller;
 
-import com.supwisdom.dlpay.conference.api.bean.ConferenceReq;
-import com.supwisdom.dlpay.conference.api.bean.ConferenceResp;
+import com.supwisdom.dlpay.api.bean.ApiResponse;
+import com.supwisdom.dlpay.conference.api.bean.*;
 import com.supwisdom.dlpay.conference.bean.ConferenceShowBean;
+import com.supwisdom.dlpay.conference.domain.TConfPeople;
 import com.supwisdom.dlpay.conference.domain.TConference;
 import com.supwisdom.dlpay.conference.service.ConferenceService;
+import com.supwisdom.dlpay.conference.util.ConferenceConstant;
 import com.supwisdom.dlpay.framework.data.SystemDateTime;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
 import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.ncmgr.domain.TNcDevice;
+import com.supwisdom.dlpay.ncmgr.service.NcService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.ModelAttribute;
@@ -15,6 +19,7 @@
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
 
+import java.util.ArrayList;
 import java.util.List;
 
 @Controller
@@ -24,8 +29,10 @@
   private SystemUtilService systemUtilService;
   @Autowired
   private ConferenceService conferenceService;
+  @Autowired
+  private NcService ncService;
 
-  @RequestMapping(value = "/login", method = RequestMethod.POST)
+  @RequestMapping(value = "/getconference", method = RequestMethod.POST)
   @ResponseBody
   public ConferenceResp getConferenceToday(@ModelAttribute ConferenceReq req) {
     ConferenceResp resp = new ConferenceResp();
@@ -35,11 +42,101 @@
       resp.setRetmsg("日期为空");
       return resp;
     }
-    List<TConference> conflist=conferenceService.getConferenceByDateAndStatus(confdate,"");
+    String devphyid=req.getDevphyid();
+    if(StringUtil.isEmpty(devphyid)){
+      resp.setRetcode(99);
+      resp.setRetmsg("设备物理id为空");
+      return resp;
+    }
+    TNcDevice device=ncService.getDevInfoByDevphyid(devphyid);
+    if(null==device){
+      resp.setRetcode(9);
+      resp.setRetmsg("设备不存在");
+      return resp;
+    }
+
+    List<ConferenceApiBean> conflist=conferenceService.getConferneceForDevice(confdate);
     resp.setConflist(conflist);
     resp.setCount(conflist.size());
     resp.setRetmsg("OK");
     resp.setRetcode(0);
     return resp;
   }
+
+
+  @RequestMapping(value = "/getattrate", method = RequestMethod.POST)
+  @ResponseBody
+  public ConfrateResp getConferenceAttendRate(@ModelAttribute ConfrateReq req) {
+    ConfrateResp resp =new ConfrateResp();
+    Integer confid=req.getConfid();
+    if(null==confid){
+      resp.setRetcode(99);
+      resp.setRetmsg("会议id为空");
+      return resp;
+    }
+
+    TConference conf=conferenceService.getConferenceById(confid);
+    if(null==conf){
+      resp.setRetcode(99);
+      resp.setRetmsg("会议不存在");
+      return resp;
+    }
+    Integer totcnt=0;
+    Integer actualcnt=0;
+    Float rate=0f;
+    if(ConferenceConstant.CONFTYPE_LIST.equals(conf.getConftype())){
+      totcnt=conferenceService.getConfPeopleCount(confid,null);
+      List<String> list=new ArrayList<>();
+      list.add(ConferenceConstant.ATTENDSTATUS_CHECKED);
+      list.add(ConferenceConstant.ATTENDSTATUS_LATE);
+      actualcnt=conferenceService.getConfPeopleCount(confid,list);
+      if(0!=totcnt){
+        rate=actualcnt*100f/totcnt;
+      }
+      resp.setActualcnt(actualcnt);
+      resp.setAttrate(rate);
+      resp.setTotcnt(totcnt);
+    }else{
+      totcnt=conferenceService.getNolistConfPeopleCount(confid);
+      resp.setTotcnt(totcnt);
+
+    }
+    return  resp;
+  }
+
+
+  @RequestMapping(value = "/getconfpeople", method = RequestMethod.POST)
+  @ResponseBody
+  public ConfPeopleResp getConferenceAttendRate(@ModelAttribute ConfPeopleReq req) {
+    ConfPeopleResp resp=new ConfPeopleResp();
+    String confdate=req.getConfdate();
+    if(StringUtil.isEmpty(confdate)){
+      resp.setRetcode(99);
+      resp.setRetmsg("会议日期为空");
+      return resp;
+    }
+    String devphyid=req.getDevphyid();
+    if(StringUtil.isEmpty(devphyid)){
+      resp.setRetcode(99);
+      resp.setRetmsg("设备物理id为空");
+      return resp;
+    }
+
+    List<ConfPeopleApiBean> lst=conferenceService.getConfPeopleListByDevphyid(devphyid,confdate);
+    resp.setCount(lst.size());
+    resp.setPeoplelist(lst);
+    resp.setRetcode(0);
+    resp.setRetmsg("ok");
+    return resp;
+  }
+
+
+    @RequestMapping(value = "/test", method = RequestMethod.POST)
+  @ResponseBody
+  public ApiResponse test() {
+    ApiResponse resp=new ApiResponse();
+    resp.setRetmsg("OK");
+    resp.setRetcode(0);
+    return resp;
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java b/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
index 9e6e477..12b0334 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
@@ -1,6 +1,8 @@
 package com.supwisdom.dlpay.conference.service;
 
 import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.conference.api.bean.ConfPeopleApiBean;
+import com.supwisdom.dlpay.conference.api.bean.ConferenceApiBean;
 import com.supwisdom.dlpay.conference.bean.ConfReportShowBean;
 import com.supwisdom.dlpay.conference.bean.ConferenceShowBean;
 import com.supwisdom.dlpay.conference.bean.ConfpeopleReportBean;
@@ -58,6 +60,9 @@
     @Transactional(rollbackFor = Exception.class, readOnly = true)
     List<TConfDtl> getUnupdateConfDtl();
 
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    List<ConferenceApiBean> getConferneceForDevice(String confdate);
+
     @Transactional(rollbackFor = Exception.class)
     TNolistConfPeople saveNolistConfPeople(TNolistConfPeople people) ;
 
@@ -76,7 +81,15 @@
     @Transactional(rollbackFor = Exception.class, readOnly = true)
     PageResult<ConfpeopleReportBean> getConfPeopleReport(Integer confid, String searchkey,List<String> attstatus, String deptcode);
 
-
     @Transactional(rollbackFor = Exception.class, readOnly = true)
     TConfPeople getTConfPeopleByConfidAndCustid(Integer confid,String custid) ;
+
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    Integer getConfPeopleCount(Integer confid,List<String> status) ;
+
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    Integer getNolistConfPeopleCount(Integer confid) ;
+
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    List<ConfPeopleApiBean> getConfPeopleListByDevphyid(String devphyid, String confdate) ;
 }
diff --git a/src/main/java/com/supwisdom/dlpay/conference/service/impl/ConferenceServiceImpl.java b/src/main/java/com/supwisdom/dlpay/conference/service/impl/ConferenceServiceImpl.java
index d5698ca..1f65ba8 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/service/impl/ConferenceServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/service/impl/ConferenceServiceImpl.java
@@ -4,6 +4,8 @@
 import cn.afterturn.easypoi.excel.ExcelImportUtil;
 import cn.afterturn.easypoi.excel.entity.ImportParams;
 import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.conference.api.bean.ConfPeopleApiBean;
+import com.supwisdom.dlpay.conference.api.bean.ConferenceApiBean;
 import com.supwisdom.dlpay.conference.bean.*;
 import com.supwisdom.dlpay.conference.dao.*;
 import com.supwisdom.dlpay.conference.domain.*;
@@ -411,6 +413,21 @@
     }
 
     @Override
+    public List<ConferenceApiBean> getConferneceForDevice(String confdate) {
+        StringBuffer querySql=new StringBuffer("select a.confid,a.confname,a.conftype," +
+                "a.confdate,a.status,a.starttime,a.endtime,a.attendtime,c.devname as confarea from tb_conference a " +
+                "left join tb_conference_devbind b on a.confid=b.confid " +
+                "left join t_nc_device c on b.deviceid=c.deviceid " +
+                "where a.confdate=:confdate ");
+
+        Query query = entityManager.createNativeQuery(querySql.toString());
+        query.setParameter("confdate",confdate);
+        query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(ConferenceApiBean.class));
+        List<ConferenceApiBean> list = query.getResultList();
+        return list;
+    }
+
+    @Override
     public TNolistConfPeople saveNolistConfPeople(TNolistConfPeople people) {
         return nolistConfPeopleDao.save(people) ;
     }
@@ -577,6 +594,42 @@
         return confPeopleDao.findByConfidAndCustid(confid,custid);
     }
 
+    @Override
+    public Integer getConfPeopleCount(Integer confid,List<String> status) {
+        if(StringUtil.isEmpty(status)){
+            return confPeopleDao.countByConfid( confid);
+        }
+        return confPeopleDao.countByConfidAndAttstatusIn(confid,status);
+    }
+
+    @Override
+    public Integer getNolistConfPeopleCount(Integer confid) {
+        return nolistConfPeopleDao.countByConfid(confid);
+    }
+
+    @Override
+    public List<ConfPeopleApiBean> getConfPeopleListByDevphyid(String devphyid, String confdate) {
+        StringBuffer querySql=new StringBuffer("select a.custname,a.attstatus,a.atttime from tb_conf_people a " +
+                "left join tb_conference b on a.confid=b.confid  " +
+                "left join tb_conference_devbind c on b.confid=c.confid " +
+                "left join t_nc_device d on c.deviceid=d.deviceid " +
+                "where b.confdate=:confdate and d.devphyid=:devphyid" +
+                "UNION  " +
+                "select a.custname,a.attstatus,a.atttime from tb_nolist_conf_people a " +
+                "left join tb_conference b on a.confid=b.confid  " +
+                "left join tb_conference_devbind c on b.confid=c.confid " +
+                "left join t_nc_device d on c.deviceid=d.deviceid " +
+                "where b.confdate=:confdate and d.devphyid=:devphyid");
+
+
+        Query query = entityManager.createNativeQuery(querySql.toString());
+        query.setParameter("devphyid",devphyid);
+        query.setParameter("confdate",confdate);
+        query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(ConfPeopleApiBean.class));
+        List<ConfPeopleApiBean> list = query.getResultList();
+        return list;
+    }
+
 
     private String checkConfTimeError(String attendtime, String endtime,String confdate,String cardno) {
         Query query = entityManager.createNativeQuery("select a.confname from tb_conference a,TB_Conf_People b where a.confid=b.confid  " +
diff --git a/src/main/java/com/supwisdom/dlpay/conference/util/ConferenceConstant.java b/src/main/java/com/supwisdom/dlpay/conference/util/ConferenceConstant.java
index 81b231b..dface1d 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/util/ConferenceConstant.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/util/ConferenceConstant.java
@@ -1,21 +1,23 @@
 package com.supwisdom.dlpay.conference.util;
 
-import com.supwisdom.dlpay.framework.util.DateUtil;
 
-import java.text.DecimalFormat;
 
 public class ConferenceConstant {
-    public static final String CONFTYPE_LIST="list";
-    public static final String CONFTYPE_NOLIST="nolist";
-    public static final String CONFSTATUS_START="start";
-    public static final String CONFSTATUS_UNSTART="unstart";
-    public static final String CONFSTATUS_OVER="over";
-    public static final String CONFSTATUS_CLOSED="closed";
-    public static final String ATTENDSTATUS_UNCHECK="uncheck";
-    public static final String ATTENDSTATUS_CHECKED="checked";
-    public static final String ATTENDSTATUS_LATE="late";
-    public static final String ATTENDSTATUS_CLOSED="closed";
-    public static final String ATTENDSTATUS_INSTEAD="instead";
+    //会议类型
+    public static final String CONFTYPE_LIST="list";//有名单
+    public static final String CONFTYPE_NOLIST="nolist";//无名单
+    //会议状态
+    public static final String CONFSTATUS_START="start";//开始
+    public static final String CONFSTATUS_UNSTART="unstart";//未开始
+    public static final String CONFSTATUS_OVER="over";  //结束
+    public static final String CONFSTATUS_CLOSED="closed";//关闭
+    //人员参会状态
+    public static final String ATTENDSTATUS_UNCHECK="uncheck";//未签到
+    public static final String ATTENDSTATUS_CHECKED="checked";//已签到
+    public static final String ATTENDSTATUS_LATE="late";//迟到
+    public static final String ATTENDSTATUS_CLOSED="closed";//关闭
+    public static final String ATTENDSTATUS_INSTEAD="instead";//代签
+
     public static final String ATTTYPE_SELF="self";
     public static final String ATTTYPE_INSTEAD="instead";
     public static final String DEVICETYPE_CONFERENCE="H";
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java
index 3bb36f2..15002d4 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java
@@ -43,6 +43,8 @@
 
     public TNcDevice getDevInfoByDevid(int devid);
 
+    public TNcDevice getDevInfoByDevphyid(String devphyid);
+
     public List<TNcDevice> getDevListByfDevid(int devid);
 
     public boolean updateTodelDevById(int devid);
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java
index 1a16206..c9142c9 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java
@@ -510,6 +510,21 @@
         return null;
     }
 
+    @Override
+    public TNcDevice getDevInfoByDevphyid(String devphyid) {
+        String sql = "select t.deviceid,t.devno,t.devname,t.fdevid,t.devtype,t.ip," +
+                "t.operflag,t.syncflag,t.synctime,t.updtime,t.buildingid,t.buildingname,t.regionid," +
+                " t.usetype,dev.devphyid from t_nc_device t left join t_nc_device" +
+                " dev on t.fdevid=dev.deviceid where t.devphyid=?1";
+        Query query = entityManager.createNativeQuery(sql, TNcDevice.class);
+        query.setParameter(1,devphyid);
+        List list = query.getResultList();
+        if (list.size()>0){
+            return (TNcDevice) list.get(0);
+        }
+        return null;
+    }
+
     @Transactional
     @Override
     public List<TNcDevice> getDevListByfDevid(int devid) {
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java b/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
index d4b8de8..174c20e 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
@@ -79,6 +79,10 @@
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TNcDevice getDevInfoByDevid(int devid);
 
+    //根据设备编号获取设备及父设备信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public TNcDevice getDevInfoByDevphyid(String devphyid);
+
     //根据控制器设备编号获取其读头设备列表
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TNcDevice> getDevListByfDevid(int devid);
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java b/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java
index 73592e9..050a089 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java
@@ -116,6 +116,11 @@
     }
 
     @Override
+    public TNcDevice getDevInfoByDevphyid(String devphyid) {
+        return ncDeviceDao.getDevInfoByDevphyid(devphyid);
+    }
+
+    @Override
     public List<TNcDevice> getDevListByfDevid(int devid) {
         return ncDeviceDao.getDevListByfDevid(devid);
     }
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index 4f18d9a..13663ee 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -202,9 +202,19 @@
 INSERT INTO "t_dictionary"("dicttype", "dicttypename", "dictval", "dictcaption") VALUES (8, '设备类型', 'H', '会议平板');
 INSERT INTO "t_dictionary"("dicttype", "dicttypename", "dictval", "dictcaption") VALUES (16, '设备使用类别', 'HY', '会议签到');
 
-INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (29, NULL, 0, NULL, 'layui-icon-app', '#', '会议签到', 8, -1, NULL);
-INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (31, NULL, 1, NULL, '', '/system/custtypeindex', '客户类别管理', 9, 3, NULL);
-INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (32, NULL, 1, NULL, '', '/system/deptindex', '部门管理', 10, 3, NULL);
-INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (33, NULL, 1, NULL, '', '/customer/index', '客户管理', 2, 21, NULL);
+
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (45, NULL, 1, NULL, '', '#', '考勤流水管理', NULL, 36, NULL);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (44, NULL, 1, NULL, '', '/confreport/index', '会议报表', 3, 29, NULL);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (43, NULL, 1, NULL, 'layui-icon-set', '/visitor/checkin', '访客登记', 54, 38, NULL);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (42, NULL, 1, NULL, '', '/atte/class/index', '考勤排班', NULL, 36, NULL);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (41, NULL, 1, NULL, 'layui-icon-set', '/visitor/index', '访客记录查询', 53, 38, NULL);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (40, NULL, 1, NULL, '', '/atte/custsea/index', '人员类别绑定', NULL, 36, NULL);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (39, NULL, 1, NULL, '', '/confpeople/index', '会议人员查询', 2, 29, NULL);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (38, NULL, 0, NULL, 'layui-icon-set', '#', '访客管理', 52, -1, NULL);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (37, NULL, 1, NULL, '', '/atte/season/index', '时令管理', NULL, 36, NULL);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (36, NULL, 0, NULL, 'layui-icon-set', '#', '人员考勤', 36, -1, NULL);
 INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (35, NULL, 1, NULL, '', '/conference/index', '会议管理', 1, 29, NULL);
-INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (39, NULL, 1, NULL, '', '/confpeople/index', '会议人员查询', 2, 29, NULL);
\ No newline at end of file
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (33, NULL, 1, NULL, '', '/customer/index', '客户管理', 2, 21, NULL);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (32, NULL, 1, NULL, '', '/system/deptindex', '部门管理', 10, 3, NULL);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (31, NULL, 1, NULL, '', '/system/custtypeindex', '客户类别管理', 9, 3, NULL);
+INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (29, NULL, 0, NULL, 'layui-icon-app', '#', '会议签到', 8, -1, NULL);
