diff --git a/src/main/java/com/supwisdom/dlpay/conference/bean/ConferenceShowBean.java b/src/main/java/com/supwisdom/dlpay/conference/bean/ConferenceShowBean.java
index 942b92c..8cb2278 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/bean/ConferenceShowBean.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/bean/ConferenceShowBean.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.conference.bean;
 
 public class ConferenceShowBean {
+    private Integer confid;
     private String confname;
     private String conftype;
     private String confdate;
@@ -11,6 +12,15 @@
     private String attendtime;
     private String timeperoid;
 
+
+    public Integer getConfid() {
+        return confid;
+    }
+
+    public void setConfid(Integer confid) {
+        this.confid = confid;
+    }
+
     public String getConfname() {
         return confname;
     }
diff --git a/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java b/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java
index 3455a5e..bba9829 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java
@@ -7,10 +7,14 @@
 import cn.afterturn.easypoi.view.PoiBaseView;
 import com.supwisdom.dlpay.api.bean.JsonResult;
 import com.supwisdom.dlpay.conference.bean.ConferenceShowBean;
+import com.supwisdom.dlpay.conference.domain.TConfPeople;
+import com.supwisdom.dlpay.conference.domain.TConferenceDevbind;
 import com.supwisdom.dlpay.conference.service.ConferenceService;
 import com.supwisdom.dlpay.conference.util.ConferenceConstant;
 import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.framework.util.*;
+import com.supwisdom.dlpay.ncmgr.domain.TNcDevice;
+import com.supwisdom.dlpay.ncmgr.service.NcService;
 import com.supwisdom.dlpay.util.WebCheckException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.annotation.AuthenticationPrincipal;
@@ -18,10 +22,7 @@
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.ui.ModelMap;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
@@ -35,6 +36,9 @@
 public class ConferenceController {
     @Autowired
     private ConferenceService conferenceService;
+    @Autowired
+    private NcService ncService;
+
 
 
     @GetMapping("/conference/index")
@@ -58,15 +62,14 @@
         }
     }
 
-  /*  @PostMapping("/discountconf/deleteconf")
-    @PreAuthorize("hasPermission('/discountconf/deleteconf','')")
+    @PostMapping("/conference/deleteconf")
     @ResponseBody
-    public JsonResult deleteDiscountRule(@RequestParam("confid") Integer confid) {
+    public JsonResult deleteConference(@RequestParam Integer id) {
         try {
-            if (null == confid) {
+            if (null == id) {
                 return JsonResult.error("参数传递错误");
             }
-            if (deviceDiscountRuleService.deleteDiscountRule(confid)) {
+            if (conferenceService.deleteConference(id)) {
                 return JsonResult.ok("删除成功！");
             } else {
                 return JsonResult.error("删除失败！");
@@ -79,7 +82,7 @@
         }
     }
 
-    @PostMapping("/discountconf/closeconf")
+  /*  @PostMapping("/discountconf/closeconf")
     @PreAuthorize("hasPermission('/discountconf/closeconf','')")
     @ResponseBody
     public JsonResult closeDiscountRule(@RequestParam("confid") Integer confid) {
@@ -105,6 +108,8 @@
     public String load4addConference(Model model) {
         String now=DateUtil.getNow("yyyyMMdd");
         model.addAttribute("maxdate",DateUtil.reformatDatetime(now,"yyyyMMdd","yyyy-MM-dd"));
+        List<TNcDevice> devices=ncService.getSystemDevByType(ConferenceConstant.DEVICETYPE_CONFERENCE);
+        model.addAttribute("confdevice",devices);
         return "conference/confform";
     }
 
@@ -118,11 +123,13 @@
                                        @RequestParam("starttime") String starttime,
                                        @RequestParam("endtime") String endtime,
                                        @RequestParam("attendtime") String attendtime,
+                                       @RequestParam("deviceid") Integer deviceid,
                                        @RequestParam(value = "file", required = false) MultipartFile file,
                                        @AuthenticationPrincipal UserDetails operUser,
                                        HttpServletRequest request) {
         try {
             if (StringUtil.isEmpty(confname)
+                    ||null==deviceid
                     || (!ConferenceConstant.CONFTYPE_LIST.equals(conftype) && !ConferenceConstant.CONFTYPE_NOLIST.equals(conftype) )
                     || !DateUtil.checkDatetimeValid(starttime, "HH:mm")
                     || !DateUtil.checkDatetimeValid(endtime, "HH:mm")
@@ -151,7 +158,7 @@
                 fpath=path + "/" + fileName;
             }
 
-            if (conferenceService.saveNewConference(confname.trim(),DateUtil.unParseToDateFormat(confdate), conftype, DateUtil.unParseToDateFormat(starttime), DateUtil.unParseToDateFormat(endtime),DateUtil.unParseToDateFormat(attendtime), oper,fpath)) {
+            if (conferenceService.saveNewConference(confname.trim(),DateUtil.unParseToDateFormat(confdate), conftype, DateUtil.unParseToDateFormat(starttime), DateUtil.unParseToDateFormat(endtime),DateUtil.unParseToDateFormat(attendtime), oper,fpath,deviceid)) {
                 return JsonResult.ok("新增成功");
             } else {
                 return JsonResult.error("新增失败");
@@ -194,4 +201,33 @@
         }
     }
 
+    @GetMapping("/conference/load4detail")
+    public String load4ConfDetails(@RequestParam("confid") Integer confid, Model model) {
+        model.addAttribute("detailConfid", confid);
+        TNcDevice device=conferenceService.getBindedDevice(confid);
+        String devname="未绑定";
+        if(null!=device){
+            devname=device.getDevname();
+        }
+        model.addAttribute("deviceName",devname);
+        return "conference/confdetail";
+    }
+
+    @GetMapping("/conference/load4detaillist")
+    @ResponseBody
+    public PageResult<TConfPeople> searchDiscountRules(@RequestParam("page") Integer pageNo,
+                                                       @RequestParam("limit") Integer pageSize,
+                                                       @RequestParam("confid") Integer confid,
+                                                       @RequestParam(value = "searchkey", required = false) String searchkey) {
+        try {
+            if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+            if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+
+            return conferenceService.getConferenceDetails(searchkey, confid, pageNo, pageSize);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/conference/dao/ConfPeopleDao.java b/src/main/java/com/supwisdom/dlpay/conference/dao/ConfPeopleDao.java
index 1a7cf7a..2bb6128 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/dao/ConfPeopleDao.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/dao/ConfPeopleDao.java
@@ -4,10 +4,15 @@
 import com.supwisdom.dlpay.conference.domain.TConfPeople;
 import com.supwisdom.dlpay.conference.domain.TConferenceDevbind;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
 @Repository
 public interface ConfPeopleDao extends JpaRepository<TConfPeople, String> {
 
+    @Modifying
+    @Query("delete from TConfPeople where confid=?1  ")
+    void deleteConfPeopleByconfid(int confid);
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/conference/dao/ConferenceDao.java b/src/main/java/com/supwisdom/dlpay/conference/dao/ConferenceDao.java
index 4ef8249..381688f 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/dao/ConferenceDao.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/dao/ConferenceDao.java
@@ -9,6 +9,6 @@
 
 @Repository
 public interface ConferenceDao extends JpaRepository<TConference, Integer> , JpaSpecificationExecutor<TConference> {
-
+    TConference findByConfid(Integer confid);
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/conference/dao/ConferenceDevbindDao.java b/src/main/java/com/supwisdom/dlpay/conference/dao/ConferenceDevbindDao.java
index ad6af9f..78b376f 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/dao/ConferenceDevbindDao.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/dao/ConferenceDevbindDao.java
@@ -3,10 +3,17 @@
 
 import com.supwisdom.dlpay.conference.domain.TConferenceDevbind;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
 @Repository
 public interface ConferenceDevbindDao extends JpaRepository<TConferenceDevbind, String> {
 
+    @Modifying
+    @Query("delete from TConferenceDevbind where confid=?1  ")
+    void deleteBindByConfid(int confid);
+
+    TConferenceDevbind findByConfid(int confid);
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/conference/domain/TConfPeople.java b/src/main/java/com/supwisdom/dlpay/conference/domain/TConfPeople.java
index b52fc7b..2ef4af9 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/domain/TConfPeople.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/domain/TConfPeople.java
@@ -5,7 +5,7 @@
 import javax.persistence.*;
 
 @Entity
-@Table(name = "TB_ConfPeople",
+@Table(name = "TB_Conf_People",
         indexes = {@Index(name = "ConfPeople_confid_idx", columnList = "confid")})
 public class TConfPeople {
   @Id
diff --git a/src/main/java/com/supwisdom/dlpay/conference/domain/TConference.java b/src/main/java/com/supwisdom/dlpay/conference/domain/TConference.java
index 4ce3b5e..f477f54 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/domain/TConference.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/domain/TConference.java
@@ -6,8 +6,8 @@
 @Table(name = "TB_CONFERENCE")
 public class TConference {
     @Id
-    @SequenceGenerator(name = "discount_ruleid", sequenceName = "SEQ_DISCOUNTRULEID", allocationSize = 1)
-    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "discount_ruleid")
+    @SequenceGenerator(name = "conference_confid", sequenceName = "SEQ_CONFERENCEID", allocationSize = 1)
+    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "conference_confid")
     @Column(name = "CONFID", nullable = false, precision = 9)
     private Integer confid;
 
diff --git a/src/main/java/com/supwisdom/dlpay/conference/domain/TConferenceDevbind.java b/src/main/java/com/supwisdom/dlpay/conference/domain/TConferenceDevbind.java
index e33217a..ac3b683 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/domain/TConferenceDevbind.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/domain/TConferenceDevbind.java
@@ -14,7 +14,7 @@
   @Column(name = "ID", nullable = false, length = 32)
   private String id;
 
-  @Column(name = "DEVICEID", nullable = false, precision = 9)
+  @Column(name = "DEVICEID", nullable = false, precision =20)
   private Integer deviceid;
 
   @Column(name = "CONFID", nullable = false, precision = 9)
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 6ae6352..b195406 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
@@ -1,8 +1,11 @@
 package com.supwisdom.dlpay.conference.service;
 
 import com.supwisdom.dlpay.conference.bean.ConferenceShowBean;
+import com.supwisdom.dlpay.conference.domain.TConfPeople;
+import com.supwisdom.dlpay.conference.domain.TConferenceDevbind;
 import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.ncmgr.domain.TNcDevice;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -15,10 +18,13 @@
     PageResult<ConferenceShowBean> getConferenceInfos(String confname, String conftype, int pageNo, int pageSize);
 
     @Transactional(rollbackFor = Exception.class)
-    boolean deleteConference(int confid) ;
+    boolean deleteConference(int confid) throws Exception;
 
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    TNcDevice getBindedDevice(int confid) ;
+/*
     @Transactional(rollbackFor = Exception.class)
-    boolean closeConference(int confid) ;
+    boolean closeConference(int confid) ;*/
 
 /*
     @Transactional(rollbackFor = Exception.class, readOnly = true)
@@ -26,12 +32,12 @@
 
     @Transactional(rollbackFor = Exception.class)
     boolean saveNewConference(String confname,String confdate, String conftype, String starttime,
-                              String endtime, String attendtime, TOperator oper, String filepath) throws Exception;
+                              String endtime, String attendtime, TOperator oper, String filepath,Integer deviceid) throws Exception;
 
-/*
+
     @Transactional(rollbackFor = Exception.class, readOnly = true)
-    PageResult<TDiscountDetail> getConferenceDetails(String searchkey, int confid, int pageNo, int pageSize);
-
+    PageResult<TConfPeople> getConferenceDetails(String searchkey, int confid, int pageNo, int pageSize);
+/*
     @Transactional(rollbackFor = Exception.class, readOnly = true)
     PageResult<ConferenceShowBean> getCheckConferenceInfos(String status, int pageNo, int pageSize);
 
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 1186265..a807f2d 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
@@ -7,8 +7,10 @@
 import com.supwisdom.dlpay.conference.bean.ConferenceShowBean;
 import com.supwisdom.dlpay.conference.dao.ConfPeopleDao;
 import com.supwisdom.dlpay.conference.dao.ConferenceDao;
+import com.supwisdom.dlpay.conference.dao.ConferenceDevbindDao;
 import com.supwisdom.dlpay.conference.domain.TConfPeople;
 import com.supwisdom.dlpay.conference.domain.TConference;
+import com.supwisdom.dlpay.conference.domain.TConferenceDevbind;
 import com.supwisdom.dlpay.conference.service.ConferenceService;
 import com.supwisdom.dlpay.conference.util.ConferenceConstant;
 import com.supwisdom.dlpay.doorlist.bean.CustomerListBean;
@@ -20,7 +22,10 @@
 import com.supwisdom.dlpay.mainservice.domain.TCard;
 import com.supwisdom.dlpay.mainservice.domain.TCustomer;
 import com.supwisdom.dlpay.mainservice.service.WebInterfaceService;
+import com.supwisdom.dlpay.ncmgr.dao.NcDeviceDao;
+import com.supwisdom.dlpay.ncmgr.domain.TNcDevice;
 import com.supwisdom.dlpay.util.WebCheckException;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
@@ -30,6 +35,9 @@
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
@@ -47,6 +55,13 @@
     private WebInterfaceService webInterfaceService;
     @Autowired
     private ConfPeopleDao confPeopleDao;
+    @Autowired
+    private ConferenceDevbindDao conferenceDevbindDao;
+    @Autowired
+    private NcDeviceDao deviceDao;
+
+    @PersistenceContext
+    private EntityManager entityManager;
 
     @Override
     public PageResult<ConferenceShowBean> getConferenceInfos(String confname, String conftype, int pageNo, int pageSize) {
@@ -74,9 +89,10 @@
             for (TConference conf : page.getContent()) {
                 ConferenceShowBean bean = new ConferenceShowBean();
                 bean.setConfname(conf.getConfname());
-                bean.setConfdate(conf.getConfdate());
+                bean.setConfdate(DateUtil.reformatDatetime(conf.getConfdate(),"yyyyMMdd","yyyy-MM-dd"));
                 bean.setConftype(conf.getConftype());
                 bean.setStatus(conf.getStatus());
+                bean.setConfid(conf.getConfid());
                 bean.setRemark(conf.getRemark());
                 bean.setStarttime(conf.getStarttime().substring(0, 2) + ":" + conf.getStarttime().substring(2));
                 bean.setEndtime(conf.getEndtime().substring(0, 2) + ":" + conf.getEndtime().substring(2));
@@ -89,17 +105,43 @@
     }
 
     @Override
-    public boolean deleteConference(int confid) {
-        return false;
+    public boolean deleteConference(int confid) throws Exception{
+        TConference conf = conferenceDao.findByConfid(confid);
+        if (null == conf) {
+            throw new WebCheckException("餐补规则不存在！");
+        } else if (!ConferenceConstant.CONFSTATUS_UNSTART.equals(conf.getStatus()) && !ConferenceConstant.CONFSTATUS_CLOSED.equals(conf.getStatus())) {
+            throw new WebCheckException("只能删除未进行的会议！");
+        }
+
+        confPeopleDao.deleteConfPeopleByconfid(confid); //名单
+        conferenceDevbindDao.deleteBindByConfid(confid); //绑定设备
+        conferenceDao.delete(conf);
+        return true;
     }
 
     @Override
+    public TNcDevice getBindedDevice(int confid) {
+        TConferenceDevbind bind=conferenceDevbindDao.findByConfid(confid);
+        if(null!=bind){
+            TNcDevice dev=deviceDao.findDevById(bind.getDeviceid());
+            return dev;
+        }
+        return null;
+    }
+/*
+    @Override
     public boolean closeConference(int confid) {
         return false;
-    }
+    }*/
 
     @Override
-    public boolean saveNewConference(String confname,String confdate, String conftype, String starttime, String endtime,String attendtime, TOperator oper, String fpath) throws Exception {
+    public boolean saveNewConference(String confname,String confdate, String conftype, String starttime, String endtime,String attendtime, TOperator oper, String fpath,Integer deviceid) throws Exception {
+
+        String errdevname=checkTimeErrorDevice(attendtime,endtime,confdate,deviceid);
+        if(!StringUtil.isEmpty(errdevname)){
+            throw new WebCheckException("设备《"+ errdevname+"》存在时间冲突，请重新选择设备");
+        }
+
         TConference conf = new TConference();
         conf.setConftype(conftype);
         conf.setConfname(confname);
@@ -115,6 +157,13 @@
         conf.setLastsaved(systime);
         conf = conferenceDao.save(conf);
 
+        TConferenceDevbind bind=new TConferenceDevbind();
+        bind.setConfid(conf.getConfid());
+        bind.setCreateOperid(oper.getOperid());
+        bind.setCreatetime(systime);
+        bind.setDeviceid(deviceid);
+        conferenceDevbindDao.save(bind);
+
         if(ConferenceConstant.CONFTYPE_NOLIST.equals(conf.getConftype())){
             return true;
         }
@@ -140,7 +189,11 @@
                 if (StringUtil.isEmpty(name)) {
                     msg += "，姓名为空";
                 }
-                TCustomerInfo customer = webInterfaceService.getAllTCustomerList(name,cardno,null).get(0);
+                TCustomerInfo customer=null;
+                List<TCustomerInfo> customerlist = webInterfaceService.getAllTCustomerList(null,cardno,null);
+                if(customerlist.size()>0){
+                    customer=customerlist.get(0);
+                }
                 if (!StringUtil.isEmpty(cardno)) {
                     if (null == customer) {
                         msg += "，市民卡用户不存在";
@@ -151,7 +204,11 @@
                 if (!StringUtil.isEmpty(cardno) && successCardnos.contains(cardno)) {
                     msg += "，市民卡号重复！";
                 }
-
+                String errconfname=checkConfTimeError(attendtime,endtime,confdate,cardno);
+                if(!StringUtil.isEmpty(errconfname)){
+             //       throw new WebCheckException("会议与《"+ StringUtils.join(errconfname.toArray(),",")+"》存在时间冲突，请重新设置会议时间");
+                    msg += "，市民卡号[" + cardno + "]与会议："+errconfname+"存在规则时间段冲突！";
+                }
 
                 if (!StringUtil.isEmpty(msg)) {
                     errmsgList.add("第" + (n + 1) + "行数据错误" + msg);
@@ -188,5 +245,66 @@
 
     }
 
+    @Override
+    public PageResult<TConfPeople> getConferenceDetails(String searchkey, int confid, int pageNo, int pageSize) {
+        StringBuffer querySql = new StringBuffer("from TConfPeople t where t.confid=:confid ");
+        StringBuffer countSql = new StringBuffer("select count(t.id) as cnt from TConfPeople t where t.confid=:confid ");
+        if (!StringUtil.isEmpty(searchkey)) {
+            querySql.append(" and (t.cardno like :str or t.username like :str) ");
+            countSql.append(" and (t.cardno like :str or t.username like :str) ");
+        }
+        querySql.append(" order by t.cardno ");
+        Query query = entityManager.createQuery(querySql.toString());
+        Query countQuery = entityManager.createQuery(countSql.toString());
+        query.setParameter("confid", confid);
+        countQuery.setParameter("confid", confid);
+        if (!StringUtil.isEmpty(searchkey)) {
+            query.setParameter("str", "%" + searchkey.trim() + "%");
+            countQuery.setParameter("str", "%" + searchkey.trim() + "%");
+        }
+        query.setFirstResult((pageNo - 1) * pageSize);
+        query.setMaxResults(pageSize); //分页显示
+        List<TConfPeople> list = query.getResultList();
+        Long count = (Long) countQuery.getSingleResult();
+        return new PageResult<>(count.longValue(), 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  " +
+                "and  (a.status='unstart' or a.status='start') " +
+                "and b.cardno=:cardno " +
+                "and a.confdate=:confdate " +
+                "and ((:attendtime between a.attendtime and a.endtime) or (:endtime between a.attendtime and a.endtime) or (a.attendtime>:attendtime and a.endtime<:endtime)) ");
+        query.setParameter("cardno", cardno);
+        query.setParameter("confdate", confdate);
+        query.setParameter("attendtime", attendtime);
+        query.setParameter("endtime", endtime);
+        List<String> confname = query.getResultList();
+        if(!StringUtil.isEmpty(confname)){
+            return confname.get(0);
+        }
+        return null;
+    }
+
+    private String checkTimeErrorDevice(String attendtime, String endtime,String confdate,Integer deviceid) {
+        Query query = entityManager.createNativeQuery("select c.devname 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.status='unstart' or a.status='start') " +
+                "and b.deviceid=:deviceid " +
+                "and a.confdate=:confdate " +
+                "and ((:attendtime between a.attendtime and a.endtime) or (:endtime between a.attendtime and a.endtime) or (a.attendtime>:attendtime and a.endtime<:endtime)) ");
+        query.setParameter("deviceid", deviceid);
+        query.setParameter("confdate", confdate);
+        query.setParameter("attendtime", attendtime);
+        query.setParameter("endtime", endtime);
+        List<String> confname = query.getResultList();
+        if(!StringUtil.isEmpty(confname)){
+            return confname.get(0);
+        }
+        return null;
+    }
+
 
 }
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 549358d..c69aa14 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/util/ConferenceConstant.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/util/ConferenceConstant.java
@@ -11,6 +11,8 @@
     public static final String ATTENDSTATUS_CHECKED="checked";
     public static final String ATTENDSTATUS_LATE="late";
     public static final String ATTENDSTATUS_INSTEAD="instead";
+    public static final String DEVICETYPE_CONFERENCE="H";
+
 
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CustomerDaoImpl.java b/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CustomerDaoImpl.java
index 6894c2f..3b58f7a 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CustomerDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CustomerDaoImpl.java
@@ -68,7 +68,7 @@
     @Transactional
     @Override
     public List<TCustomerInfo> getAllTCustomerList(String perName, String cardno, String bankcardno) {
-        String sql = "select a.custid,a.custname,b.cardno,b.bankcardno,b.cardphyid,b.expiredate from T_Customer a left join t_card b on a.custid = b.custid " +
+        String sql = "select a.custid,a.custname,b.cardno,b.bankcardno,b.cardphyid,b.expiredate,a.custtypeid,a.deptcode from T_Customer a left join t_card b on a.custid = b.custid " +
                 " where a.status='1' and b.status='normal' and b.transtatus='normal' ";
         if (!StringUtil.isEmpty(perName)){
             sql += " and a.custname like :perName ";
@@ -85,10 +85,10 @@
             query.setParameter("perName", "%"+perName+"%");
         }
         if (!StringUtil.isEmpty(cardno)){
-            query.setParameter("cardno", cardno);
+            query.setParameter("cardno", "%"+cardno+"%");
         }
         if (!StringUtil.isEmpty(bankcardno)){
-            query.setParameter("bankcardno", bankcardno);
+            query.setParameter("bankcardno", "%"+bankcardno+"%");
         }
         List<TCustomerInfo> list = query.getResultList();
         return list;
diff --git a/src/main/resources/templates/conference/confdetail.html b/src/main/resources/templates/conference/confdetail.html
new file mode 100644
index 0000000..58b8960
--- /dev/null
+++ b/src/main/resources/templates/conference/confdetail.html
@@ -0,0 +1,55 @@
+<div class="layui-card">
+    <div class="layui-card-body">
+        <div class="layui-form">
+            <span>绑定设备：</span>
+            <span th:text="${deviceName}"></span>
+
+        </div>
+        <div class="layui-form toolbar">
+            搜索：
+            <input type="hidden" id="search-conference-detail-confid" th:value="${detailConfid}" />
+            <input id="search-conference-detail-searchkey" class="layui-input search-input" maxlength="20" type="text" style="width: 200px;"
+                   placeholder="输入市民卡号或姓名查询"/>&emsp;
+            <button id="btn-search-conference-detail" class="layui-btn icon-btn" data-type="search"><i
+                    class="layui-icon">&#xe615;</i>搜索
+            </button>
+        </div>
+        <table class="layui-table" id="conferenceDetailTable" lay-filter="conferenceDetailTable-filter"></table>
+    </div>
+</div>
+<script>
+
+    layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin;
+        var element = layui.element;
+
+
+        // 渲染表格
+        var renderDetailTable = function (obj) {
+            table.render({
+                elem: '#conferenceDetailTable',
+                url: '[[@{/conference/load4detaillist}]]',
+                where: obj,
+                page: true,
+                height: 472,
+                cols: [
+                    [
+                        {field: 'cardno', title: '市民卡号', align: 'center'},
+                        {field: 'custname', title: '姓名', align: 'center'}
+                    ]
+                ]
+            });
+        }
+        renderDetailTable({confid: $("#search-conference-detail-confid").val()});
+
+        // 搜索按钮点击事件
+        $('#btn-search-conference-detail').click(function () {
+            var confid = $("#search-conference-detail-confid").val();
+            var searchkey = $("#search-conference-detail-searchkey").val();
+            table.reload('conferenceDetailTable', {where: {confid: confid, searchkey: searchkey}, page: {curr: 1}});
+        });
+
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/conference/confform.html b/src/main/resources/templates/conference/confform.html
index cfc45f0..3b29c0f 100644
--- a/src/main/resources/templates/conference/confform.html
+++ b/src/main/resources/templates/conference/confform.html
@@ -50,15 +50,19 @@
                    class="layui-input" lay-verify="required"/>
         </div>
     </div>
+    <div class="layui-form-item">
+        <label class="confinput-label layui-form-label"><span style="color: red">* </span>绑定设备</label>
+        <div class="layui-input-block">
+             <select lay-verify="required" name="deviceid" class="layui-select" id="conference-form-select-binddevice" lay-search>
+                 <option th:each="lst:${confdevice}" th:value="${lst.deviceid}"
+                         th:text="${lst.devname}"></option>
+             </select>&emsp;
+         </div>
+    </div>
 
     <div class="layui-form-item" id="conference-conflist">
         <label class="confinput-label layui-form-label"><span style="color: red">* </span>会议人员</label>
-        <!-- <div class="layui-input-block">
-             <select lay-verify="required" name="listid" class="layui-select" id="conference-form-select-listid">
-                 <option th:each="lst:${listbeans}" th:value="${lst.listid}"
-                         th:text="${lst.listname}"></option>
-             </select>&emsp;
-         </div>-->
+
         <div class="layui-input-inline" style="width: auto;">
             <button type="button" class="layui-btn upoadfile-btn">
                 <i class="layui-icon">&#xe67c;</i>上传名单
@@ -87,6 +91,7 @@
 
         var confType = 'list';
 
+
         form.render("select");
         laydate.render({
             elem: '#form-conference-starttime',
@@ -131,6 +136,7 @@
             debugger
             var token = $("meta[name='_csrf_token']").attr("value");
             var vdata = data.field;
+
             if (null == vdata.starttime || null == vdata.endtime) {
                 layer.msg("请选择时间段", {icon: 2, time: 1500});
                 return;
@@ -150,6 +156,7 @@
             formData.append("endtime", vdata.endtime);
             formData.append("attendtime", vdata.attendtime);
             formData.append("confdate",vdata.confdate);
+            formData.append("deviceid",vdata.deviceid);
             var flag=false;
             var files = $('#form-conference-records').prop('files');
             for (var i = 0; i < files.length; i++) {
diff --git a/src/main/resources/templates/conference/conflist.html b/src/main/resources/templates/conference/conflist.html
index e3e175d..71a4011 100644
--- a/src/main/resources/templates/conference/conflist.html
+++ b/src/main/resources/templates/conference/conflist.html
@@ -10,14 +10,17 @@
         <div class="layui-form toolbar">
             搜索：
             <select id="search-conference-conftype">
-                <option value=""> 选择会议类型 </option>
-                <option value="list"> 有名单 </option>
-                <option value="nolist"> 无名单 </option>
+                <option value=""> 选择会议类型</option>
+                <option value="list"> 有名单</option>
+                <option value="nolist"> 无名单</option>
             </select>&emsp;
-            <input id="search-conference-confname" class="layui-input search-input" maxlength="20" type="text" placeholder="输入名称查询"/>&emsp;
+            <input id="search-conference-confname" class="layui-input search-input" maxlength="20" type="text"
+                   placeholder="输入名称查询"/>&emsp;
             <button id="btn-search-conference" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
             </button>
-            <button id="btn-conference-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon">&#xe654;</i>新 增</button>
+            <button id="btn-conference-add" class="layui-btn icon-btn" data-type="add"><i
+                    class="layui-icon">&#xe654;</i>新 增
+            </button>
         </div>
         <table class="layui-table" id="conferenceTable" lay-filter="conferenceTable-filter"></table>
     </div>
@@ -26,13 +29,14 @@
 
 <!-- 表格操作列 -->
 <script type="text/html" id="conference-table-bar">
-    {{# if(d.conftype=='list' ){ }}
-    <a class="layui-btn layui-btn layui-btn-xs" lay-event="detail">查看名单</a>
-    {{# } }}
-    {{# if(d.status=='closed' || d.status=='over'){ }}
-        <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
-    {{# } else if(d.status=='unstart'){ }}
-        <a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="closed">关闭</a>
+
+    {{# if(d.status=='unstart'&&d.conftype=='list'){ }}
+    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
+    <a class="layui-btn layui-btn layui-btn-xs" lay-event="detail">查看明细</a>
+    {{# } else if(d.status=='unstart'&&d.conftype=='nolist'){ }}
+    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
+    {{# } else if(d.status!='unstart'&&d.conftype=='list'){ }}
+    <a class="layui-btn layui-btn layui-btn-xs" lay-event="detail">查看明细</a>
     {{# } }}
 </script>
 
@@ -51,13 +55,17 @@
             page: true,
             cols: [
                 [
-                    {field: 'confname', title: '会议名称', align: 'center', fixed: 'left' },
-                    {field: 'confdate',width:150, title: '会议日期',  align: 'center'},
-                    {field: 'timeperoid',width:150, title: '会议时间',  align: 'center'},
-                    {field: 'attendtime',width:150, title: '签到时间',  align: 'center'},
-
+                    {field: 'confname', title: '会议名称', align: 'center', fixed: 'left'},
+                    {field: 'confdate', width: 150, title: '会议日期', align: 'center'},
+                    {field: 'timeperoid', width: 150, title: '会议时间', align: 'center'},
+                    {field: 'attendtime', width: 150, title: '签到时间', align: 'center'},
                     {
-                        field: 'conftype', title: '会议类型', align: 'center', width: 120,  sort: true, templet: function (d) {
+                        field: 'conftype',
+                        title: '会议类型',
+                        align: 'center',
+                        width: 120,
+                        sort: true,
+                        templet: function (d) {
                             if ('list' == d.conftype) {
                                 return '有名单';
                             } else if ('nolist' == d.conftype) {
@@ -82,8 +90,8 @@
                             }
                         }
                     },
-                  /*  {field: 'remark', title: '备注',  align: 'center'},*/
-                    {align: 'center', title: '操作', width: 250, toolbar: '#conference-table-bar',  fixed: 'right'}
+                    /*  {field: 'remark', title: '备注',  align: 'center'},*/
+                    {align: 'center', title: '操作', width: 250, toolbar: '#conference-table-bar', fixed: 'right'}
                 ]
             ]
         });
@@ -109,14 +117,16 @@
         //监听单元格
         table.on('tool(conferenceTable-filter)', function (obj) {
             var data = obj.data;
-            if('del' == obj.event){
-                layer.confirm('确定直接删除会议【'+data.confname+'】吗?', {
+            console.log(data);
+            if ('del' == obj.event) {
+                layer.confirm('确定直接删除会议【' + data.confname + '】吗?', {
                     btn: ['确定', '取消']
-                },function(){
+                }, function () {
                     layer.load(2);
-                    admin.go('[[@{/conference/deleterule}]]', {
-                        ruleid: data.ruleid,
-                        _csrf: $("meta[name='_csrf_token']").attr("value")
+                    let token = $("meta[name='_csrf_token']").attr("value");
+                    admin.go('[[@{/conference/deleteconf}]]', {
+                        _csrf:token,
+                        id: data.confid
                     }, function (data) {
                         console.log(data.code);
                         layer.closeAll('loading');
@@ -136,14 +146,13 @@
                     });
                 });
 
-            }else if('closed' == obj.event){
-                layer.confirm('确定关闭会议【'+data.confname+'】吗?', {
-                    btn: ['确定', '取消']
-                },function(){
+                /*layer.confirm('确定直接删除会议【' + data.confname + '】吗?', function (i) {
+                    layer.close(i);
                     layer.load(2);
-                    admin.go('[[@{/conference/closerule}]]', {
-                        ruleid: data.ruleid,
-                        _csrf: $("meta[name='_csrf_token']").attr("value")
+                    let token = $("meta[name='_csrf_token']").attr("value");
+                    admin.go('[[@{/conference/deleteconf}]]', {
+                        _csrf: token,
+                        id: 1234
                     }, function (data) {
                         console.log(data.code);
                         layer.closeAll('loading');
@@ -151,22 +160,23 @@
                             layer.msg(data.msg, {icon: 1});
                         } else if (data.code == 401) {
                             layer.msg(data.msg, {icon: 2, time: 1500}, function () {
-                                location.replace('[[@{/login}]]');
+                                location.replace('/login');
                             }, 1000);
                             return;
                         } else {
                             layer.msg(data.msg, {icon: 2});
                         }
-                        table.reload('conferenceTable');
-                    }, function (err) {
-                        admin.errorBack(err)
+                        table.reload('custtype-table', {});
+                    }, function (ret) {
+                        console.log(ret);
+                        layer.closeAll('loading');
+                        layer.msg('请求失败了，请稍后再试', {icon: 2});
                     });
-                });
-
-            }else if('detail' == obj.event){
+                });*/
+            } else if ('detail' == obj.event) {
                 admin.popupCenter({
                     title: "查看名单",
-                    path: '[[@{/conference/load4detail}]]?ruleid=' + data.ruleid,
+                    path: '[[@{/conference/load4detail}]]?confid=' + data.confid,
                     area: '600px',
                     finish: function () {
                         table.reload('conferenceTable');
diff --git a/src/main/resources/templates/ncmgr/nc_dev.html b/src/main/resources/templates/ncmgr/nc_dev.html
index c09c728..20d89e1 100644
--- a/src/main/resources/templates/ncmgr/nc_dev.html
+++ b/src/main/resources/templates/ncmgr/nc_dev.html
@@ -343,7 +343,7 @@
 
 <script>
     var dev_validatePass = function (rule, value, callback) {
-        //console.log(vue.devnoDis)
+        console.log(dev_vue.devnoDis)
         if (!dev_vue.devnoDis) {
             if (!value) {
                 return callback(new Error('请输入读头号'));
@@ -508,7 +508,7 @@
                     this.devnoDis = false;
                     //this.continueadd=true;
                     //this.checkvisible=true;
-                } else if (value == 'C') {
+                } else if (value == 'C'||value=='H') {
                     this.devnoDis = true;
                     this.fdevDis = true;
                     this.devUpform.devno = '';
@@ -549,7 +549,10 @@
                 }
                 else if (row.devtype == 'R') {
                     return '读头';
-                } else {
+                }
+                else if (row.devtype == 'H') {
+                    return '会议平板';
+                }  else {
                     return row.devtype;
                 }
             },
