完善会议签到查询,增加绑定设备、删除、人员设备查询功能,完善会议时间、设备冲突判断
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;
                 }
             },