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 b987adf..3eabbbe 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
@@ -114,7 +114,9 @@
         Integer confid = req.getConfid();
         TConference conference = conferenceService.getConferenceById(confid);
         if (null == conference) {
-            resp.setRetmsg("");
+            resp.setRetmsg("暂无会议");
+            resp.setRetcode(0);
+            return resp;
         }
 
         List<ConfPeopleApiBean> lst = conferenceService.getConfPeopleListByConfid(confid, conference.getConftype());
@@ -134,7 +136,7 @@
         Integer confid = req.getConfid();
         String timestamp = req.getTimestamp();
         String devphyid = req.getDevphyid();
-        /*if (null == confid || StringUtil.isEmpty(timestamp) || StringUtil.isEmpty(devphyid)) {
+        if (null == confid || StringUtil.isEmpty(timestamp) || StringUtil.isEmpty(devphyid)) {
             mov.addObject("msg", "签到失败");
             mov.addObject("errorMsg", "参数传递错误");
             mov.setViewName("apph5/confresult");
@@ -168,7 +170,7 @@
             mov.addObject("errorMsg", "时间误差过大");
             mov.setViewName("apph5/confresult");
             return mov;
-        }*/
+        }
 
         if(StringUtil.isEmpty(userid)){
             mov.addObject("confid",confid);
@@ -183,7 +185,7 @@
             return mov;
         }
 
-        /*String atttime = DateUtil.getNow("HHmm");
+        String atttime = DateUtil.getNow("HHmm");
 
         int compareAttend = DateUtil.compareDatetime(atttime, conference.getAttendtime(), "HHmm");
         int compareStart = DateUtil.compareDatetime(atttime, conference.getStarttime(), "HHmm");
@@ -245,7 +247,7 @@
 
         mov.addObject("msg", "签到成功");
         mov.addObject("remarkTitle", "会议概要");
-        mov.addObject("remark", conference.getRemark());*/
+        mov.addObject("remark", conference.getRemark());
         mov.setViewName("apph5/confresult");
         return mov;
     }
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 dc52c3b..51841ee 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java
@@ -8,6 +8,7 @@
 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.TConference;
 import com.supwisdom.dlpay.conference.domain.TConferenceDevbind;
 import com.supwisdom.dlpay.conference.service.ConferenceService;
 import com.supwisdom.dlpay.conference.util.ConferenceConstant;
@@ -15,12 +16,20 @@
 import com.supwisdom.dlpay.customer.bean.CustomerSearchBean;
 import com.supwisdom.dlpay.doorlist.bean.TCustomerImportBean;
 import com.supwisdom.dlpay.doorlist.bean.TCustomerInfo;
+import com.supwisdom.dlpay.doorlist.service.DoorlistMgrService;
 import com.supwisdom.dlpay.framework.domain.TOperator;
+import com.supwisdom.dlpay.framework.service.SystemUtilService;
 import com.supwisdom.dlpay.framework.util.*;
 import com.supwisdom.dlpay.mainservice.service.WebInterfaceService;
+import com.supwisdom.dlpay.ncmgr.domain.TNcAllottime;
+import com.supwisdom.dlpay.ncmgr.domain.TNcAllottimeId;
+import com.supwisdom.dlpay.ncmgr.domain.TNcCardlist;
 import com.supwisdom.dlpay.ncmgr.domain.TNcDevice;
 import com.supwisdom.dlpay.ncmgr.service.NcService;
+import com.supwisdom.dlpay.util.RedisUtil;
 import com.supwisdom.dlpay.util.WebCheckException;
+import com.supwisdom.dlpay.visitormanage.domain.EVisitorConfDtl;
+import com.supwisdom.dlpay.visitormanage.service.VisitormanageService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.annotation.AuthenticationPrincipal;
 import org.springframework.security.core.userdetails.UserDetails;
@@ -34,7 +43,9 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.File;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -46,7 +57,12 @@
     private NcService ncService;
     @Autowired
     private WebInterfaceService webInterfaceService;
-
+    @Autowired
+    private SystemUtilService systemUtilService;
+    @Autowired
+    private VisitormanageService visitormanageService;
+    @Autowired
+    DoorlistMgrService doorlistMgrService;
 
     @GetMapping("/conference/index")
     public String ConferenceView() {
@@ -65,7 +81,7 @@
             if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
             TOperator oper = (TOperator) operUser;
             String deptcode = oper.getDeptcode();
-            return conferenceService.getConferenceInfos(confname, conftype, deptcode,"", pageNo, pageSize);
+            return conferenceService.getConferenceInfos(confname, conftype, deptcode, "", pageNo, pageSize);
         } catch (Exception e) {
             e.printStackTrace();
             return new PageResult<>(99, "系统查询错误");
@@ -80,6 +96,12 @@
                 return JsonResult.error("参数传递错误");
             }
             if (conferenceService.deleteConference(id)) {
+
+                EVisitorConfDtl dtl = visitormanageService.getVisitorConfByConfid(id);
+                if(null!=dtl){
+                    dtl.setStatus("closed");
+                    visitormanageService.saveVisitorConf(dtl);
+                }
                 return JsonResult.ok("删除成功！");
             } else {
                 return JsonResult.error("删除失败！");
@@ -154,7 +176,7 @@
                 return JsonResult.error("登录过期，请重新登录");
             }
 
-            if (conferenceService.saveNewConference(confname.trim(), DateUtil.unParseToDateFormat(confdate), conftype, DateUtil.unParseToDateFormat(starttime), DateUtil.unParseToDateFormat(endtime), DateUtil.unParseToDateFormat(attendtime), oper,  deviceid,remark)) {
+            if (conferenceService.saveNewConference(confname.trim(), DateUtil.unParseToDateFormat(confdate), conftype, DateUtil.unParseToDateFormat(starttime), DateUtil.unParseToDateFormat(endtime), DateUtil.unParseToDateFormat(attendtime), oper, deviceid, remark)) {
                 return JsonResult.ok("新增成功");
             } else {
                 return JsonResult.error("新增失败");
@@ -209,6 +231,122 @@
         return "conference/confdetail";
     }
 
+    @GetMapping("/conference/load4qrcode")
+    public String load4QRcode(@RequestParam("confid") Integer confid, Model model) {
+        TConference conf = conferenceService.getConferenceById(confid);
+        if (null == conf) {
+            return null;
+        }
+        model.addAttribute("confid", confid);
+      /*  model.addAttribute("starttime",conf.getAttendtime());
+        model.addAttribute("endtime",conf.getEndtime());*/
+        EVisitorConfDtl dtl = visitormanageService.getVisitorConfByConfid(confid);
+        if (null != dtl) {
+            model.addAttribute("qrcode", dtl.getQrcode());
+        }
+
+        return "conference/confqrcode";
+    }
+
+
+    @PostMapping("/conference/getqrcode")
+    @ResponseBody
+    public JsonResult getQRcode(@RequestParam("confid") Integer confid,
+                                @RequestParam("starttime") String starttime,
+                                @RequestParam("endtime") String endtime, Model model) {
+
+        TConference conf = conferenceService.getConferenceById(confid);
+        if (null == conf) {
+            JsonResult.error("会议不存在");
+        }
+        starttime = DateUtil.reformatDatetime(starttime, "HH:mm", "HHmm");
+        endtime = DateUtil.reformatDatetime(endtime, "HH:mm", "HHmm");
+
+        if (DateUtil.compareDatetime(endtime, starttime, "HHmm") <= 0) {
+            return JsonResult.error("时间范围错误，结束时间必须比起始时间大");
+        } /*else if (DateUtil.compareDatetime(starttime, conf.getAttendtime(), "HHmm") <= 0) {
+            return JsonResult.error("时间范围错误，有效时间必须比签到时间早");
+        } else if (DateUtil.compareDatetime(conf.getEndtime(), endtime, "HHmm") <= 0) {
+            return JsonResult.error("时间范围错误，有效时间必须比结束时间晚");
+        }*/
+       /* Integer delay=0;
+
+        String delaypara=systemUtilService.getBusinessValue("conference.opendoor.delay");
+        if(!StringUtil.isEmpty(delaypara)){
+            delay=Integer.parseInt(delaypara);
+        }*/
+
+
+
+        EVisitorConfDtl dtl = visitormanageService.getVisitorConfByConfid(confid);
+        if (null == dtl) {
+
+            dtl = new EVisitorConfDtl();
+            //    String starttime=DateUtil.getCaculatedTime(conf.getAttendtime(),delay*-1);
+            //    String endtime=DateUtil.getCaculatedTime(conf.getEndtime(),delay);
+            dtl.setConfid(confid);
+            dtl.setStatus("normal");
+            String time = DateUtil.getNow("yyyyMMddHHmmss");
+            String s = StringUtil.getRandomString(18);
+            s += time;
+            String sign = "SIGNFORCONFERS" + s;
+            dtl.setSign(s);
+            dtl.setQrcode(sign);
+
+            List<TNcCardlist> tNcCardlists = new ArrayList<TNcCardlist>();
+            List<TNcAllottime> tNcAllottimes = new ArrayList<TNcAllottime>();
+
+            //long listid = webInterfaceService.getNextSeqTDoorcardlst();
+            //从缓存读取列表值并加1
+            long listid = RedisUtil.incr("seq_cardlist");
+            TNcCardlist tmpCardlist = new TNcCardlist();
+            tmpCardlist.setListid("100"+listid  );
+            tmpCardlist.setCustid(s);
+            tmpCardlist.setCustname(conf.getConfname());
+            tmpCardlist.setCardno(s);
+            tmpCardlist.setBankcardno("");
+            tmpCardlist.setCardphyid("");
+            tmpCardlist.setClosedate("");
+            tmpCardlist.setDeviceid(3);
+            tmpCardlist.setOperflag("A");
+            tmpCardlist.setRectime(time);
+            tmpCardlist.setSynctime("");
+            tmpCardlist.setSyncflag("Y");
+            tmpCardlist.setRtnflag("Y");
+            tmpCardlist.setRtntime(time);
+            tmpCardlist.setVersion(1);
+            tmpCardlist.setOperid("");
+            tmpCardlist.setReason("内部人员访客app申请");
+
+            tNcCardlists.add(tmpCardlist);
+
+            //webInterfaceService.saveTDoorcardlst(tDoorcardlst);
+            TNcAllottimeId tNcAllottimeId = new TNcAllottimeId();
+            tNcAllottimeId.setListid("100"+listid );
+            tNcAllottimeId.setTimeid("1");
+            TNcAllottime tNcAllottime = new TNcAllottime();
+            tNcAllottime.setDeviceid(3);
+            tNcAllottime.setId(tNcAllottimeId);
+
+            tNcAllottimes.add(tNcAllottime);
+            //long end1=System.currentTimeMillis(); //获取结束时间
+            //System.out.println("程序运行时间： "+(end1-start1)+"ms");
+
+            doorlistMgrService.batchSaveCardList(tNcCardlists);
+            doorlistMgrService.batchSaveAllotTime(tNcAllottimes);
+            tNcCardlists.clear();
+            tNcAllottimes.clear();
+            RedisUtil.incr("zcard_max_version");
+            tNcCardlists.clear();
+        }
+        dtl.setEndtime(endtime);
+        dtl.setStarttime(starttime);
+        visitormanageService.saveVisitorConf(dtl);
+
+        String qrcode=dtl.getQrcode();
+        return JsonResult.ok(qrcode);
+    }
+
     @GetMapping("/conference/load4detaillist")
     @ResponseBody
     public PageResult<TConfPeople> searchConfPeople(@RequestParam("page") Integer pageNo,
@@ -226,7 +364,7 @@
         }
     }
 
-    @RequestMapping("/conference/getQRCode")
+    @RequestMapping("/conference/getQRCode2")
     @ResponseBody
     public void getQRCode(@RequestParam("confid") String id, HttpServletResponse httpServletResponse) throws Exception {
         // QRCodeUtil.createQrCode(new FileOutputStream(new File("d:\\qrcode\\qrcode.jpg")),"confid="+id,800,"JPEG");
@@ -244,7 +382,7 @@
 
     @GetMapping("/conference/loadimport")
     public String loadimport(@RequestParam("confid") Integer confid,
-                             @RequestParam("confname") String confname,Model model) {
+                             @RequestParam("confname") String confname, Model model) {
         model.addAttribute("detailConfid", confid);
         model.addAttribute("confName", confname);
 
@@ -271,7 +409,7 @@
                 fpath = path + "/" + fileName;
             }
 
-            if (conferenceService.saveConferencePeopleByExcel(confid,fpath)) {
+            if (conferenceService.saveConferencePeopleByExcel(confid, fpath)) {
                 return JsonResult.ok("新增成功");
             } else {
                 return JsonResult.error("新增失败");
@@ -312,9 +450,9 @@
     @RequestMapping("/conference/listpeopleforimport")
     @ResponseBody
     public PageResult<TCustomerImportBean> listConfpeople(
-                                                 @RequestParam(value = "custname", required = false) String custname,
-                                                 @RequestParam(value = "deptcode", required = false) String deptcode,
-                                                 @AuthenticationPrincipal TOperator operUser) {
+            @RequestParam(value = "custname", required = false) String custname,
+            @RequestParam(value = "deptcode", required = false) String deptcode,
+            @AuthenticationPrincipal TOperator operUser) {
         try {
             CustomerSearchBean searchBean = new CustomerSearchBean();
             searchBean.setCustname(custname);
diff --git a/src/main/java/com/supwisdom/dlpay/customer/controller/CustomerController.java b/src/main/java/com/supwisdom/dlpay/customer/controller/CustomerController.java
index b58c106..ae32c0e 100644
--- a/src/main/java/com/supwisdom/dlpay/customer/controller/CustomerController.java
+++ b/src/main/java/com/supwisdom/dlpay/customer/controller/CustomerController.java
@@ -62,7 +62,7 @@
         model.put("custtypelist", typeString);
         List<TCustType> list = systemService.findAllCusttype();
         TCustType type=new TCustType();
-        type.setCusttypeid(0);
+        type.setCusttypeid(-1);
         type.setCusttypename("全部");
         list.add(0,type);
         model.addAttribute("typelist", list);
@@ -89,6 +89,7 @@
                 deptcode = operUser.getDeptcode();
             }
             searchBean.setDeptcode(deptcode);
+
             searchBean.setCusttypeid(custtypeid);
             PageResult<TCustomerInfo> bean = webInterfaceService.getCustomerInfoPage(searchBean);
 
@@ -105,7 +106,8 @@
 
         List<TDept> deptlist = systemService.findAllDept();
         model.addAttribute("deptlist", deptlist);
-
+        List<TCustType> list = systemService.findAllCusttype();
+        model.addAttribute("typelst", list);
         return "doorlist/customer/form";
     }
 
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
index 3a7e013..df6d311 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
@@ -324,4 +324,19 @@
   public static String getUTCTime() {
     return getUTCTime(System.currentTimeMillis());
   }
+
+
+
+  public static String getCaculatedTime(String time,int minute) {
+    SimpleDateFormat sdf=new SimpleDateFormat("HHmm");
+    String newtime="";
+    try{
+      Date d=sdf.parse(time);
+      Date newd=setMinutes(d,minute);
+      newtime=sdf.format(newd);
+    }catch (Exception e){
+      e.printStackTrace();
+    }
+    return newtime;
+  }
 }
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 af0f85f..828f894 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
@@ -115,7 +115,8 @@
         String countSql = "select count(*) as cnt 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 (null!=param.getCusttypeid()){
+        Integer i=param.getCusttypeid();
+        if (null!=i&&-1!=i){
             sql += " and a.custtypeid = :custtypeid ";
             countSql += " and a.custtypeid = :custtypeid ";
         }
@@ -140,7 +141,7 @@
             query.setParameter("perName", "%"+perName.trim()+"%");
             countQuery.setParameter("perName", "%"+perName.trim()+"%");
         }
-        if (null!=param.getCusttypeid()){
+        if (null!=i&&-1!=i){
             query.setParameter("custtypeid", param.getCusttypeid());
             countQuery.setParameter("custtypeid", param.getCusttypeid());
         }
diff --git a/src/main/java/com/supwisdom/dlpay/visitormanage/dao/VisitorDao.java b/src/main/java/com/supwisdom/dlpay/visitormanage/dao/VisitorDao.java
index f506fe9..4bff0c8 100644
--- a/src/main/java/com/supwisdom/dlpay/visitormanage/dao/VisitorDao.java
+++ b/src/main/java/com/supwisdom/dlpay/visitormanage/dao/VisitorDao.java
@@ -19,6 +19,8 @@
     public PageResult<EVisitorDtl> getVisitorInfoPage(VisitorSearchBean param);
     public PageResult<VisitorShowBean> getCheckInfoPage(VisitorCheckSearchBean param);
     public boolean saveVisitorCheck(EVisitorCheckDtl bean);
+    public boolean saveVisitorConf(EVisitorConfDtl bean);
     public EVisitorCheckDtl getVisitorCheckById(int id);
+    public EVisitorConfDtl getVisitorConfByConfid(int id);
     public EVisitorCheckDtl getVisitorCheckBySign(String sign);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/visitormanage/dao/impl/VisitorDaoImpl.java b/src/main/java/com/supwisdom/dlpay/visitormanage/dao/impl/VisitorDaoImpl.java
index ad5b2dd..039ca1e 100644
--- a/src/main/java/com/supwisdom/dlpay/visitormanage/dao/impl/VisitorDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/visitormanage/dao/impl/VisitorDaoImpl.java
@@ -161,6 +161,19 @@
 
     @Transactional
     @Override
+    public boolean saveVisitorConf(EVisitorConfDtl bean) {
+        boolean flag = false;
+        try {
+            entityManager.persist(bean);
+            flag = true;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return flag;
+    }
+
+    @Transactional
+    @Override
     public EVisitorCheckDtl getVisitorCheckById(int id) {
 
         String sql = "select a.* from E_VISITOR_CHECK_DTL a  " +
@@ -175,6 +188,20 @@
     }
     @Transactional
     @Override
+    public EVisitorConfDtl getVisitorConfByConfid(int id) {
+        String sql = "select a.* from E_VISITOR_CONF_DTL a  " +
+                " where a.confid = ?  ";
+        Query query = entityManager.createNativeQuery(sql, EVisitorConfDtl.class);
+        query.setParameter(1, id);
+        List<EVisitorConfDtl> list = query.getResultList();
+        if (list != null && list.size() > 0) {
+            return list.get(0);
+        }
+        return null;
+    }
+
+    @Transactional
+    @Override
     public EVisitorCheckDtl getVisitorCheckBySign(String sign) {
 
         String sql = "select a.* from E_VISITOR_CHECK_DTL a  " +
diff --git a/src/main/java/com/supwisdom/dlpay/visitormanage/domain/EVisitorConfDtl.java b/src/main/java/com/supwisdom/dlpay/visitormanage/domain/EVisitorConfDtl.java
new file mode 100644
index 0000000..743687e
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/visitormanage/domain/EVisitorConfDtl.java
@@ -0,0 +1,87 @@
+package com.supwisdom.dlpay.visitormanage.domain;
+
+import javax.persistence.*;
+
+/**
+ * Created by shuwei on 17/6/12.
+ */
+@Entity
+@Table(name = "E_VISITOR_CONF_DTL")
+public class EVisitorConfDtl {
+
+    private int id;
+    //访客身份证号
+    private Integer confid;
+    private String starttime;
+    private String endtime;
+    private String status;
+    private String qrcode;
+    private String sign;
+
+
+    @Id
+    @Column(name = "ID", unique = true,  nullable = false, length = 32)
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    @Column(name = "CONFID", length = 9)
+    public Integer getConfid() {
+        return confid;
+    }
+
+    public void setConfid(Integer confid) {
+        this.confid = confid;
+    }
+
+    @Column(name = "starttime", length = 4)
+    public String getStarttime() {
+        return starttime;
+    }
+
+    public void setStarttime(String starttime) {
+        this.starttime = starttime;
+    }
+
+    @Column(name = "endtime", length = 4)
+    public String getEndtime() {
+        return endtime;
+    }
+
+    public void setEndtime(String endtime) {
+        this.endtime = endtime;
+    }
+
+
+    @Column(name = "QRCODE", length = 255)
+    public String getQrcode() {
+        return qrcode;
+    }
+
+    public void setQrcode(String qrcode) {
+        this.qrcode = qrcode;
+    }
+
+    @Column(name = "SIGN", length = 32)
+    public String getSign() {
+        return sign;
+    }
+
+    public void setSign(String sign) {
+        this.sign = sign;
+    }
+
+    @Column(name = "STATUS", length = 32)
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/visitormanage/domain/VisitorCheckBean.java b/src/main/java/com/supwisdom/dlpay/visitormanage/domain/VisitorCheckBean.java
index 88c2247..968d8bc 100644
--- a/src/main/java/com/supwisdom/dlpay/visitormanage/domain/VisitorCheckBean.java
+++ b/src/main/java/com/supwisdom/dlpay/visitormanage/domain/VisitorCheckBean.java
@@ -18,6 +18,8 @@
     private String company;
     private String remarks;
     private String sign;
+    //申请码模式（conf 为时间模式）
+    private String checkmode;
 
     public String getVisitorname() {
         return visitorname;
@@ -98,4 +100,12 @@
     public void setSign(String sign) {
         this.sign = sign;
     }
+
+    public String getCheckmode() {
+        return checkmode;
+    }
+
+    public void setCheckmode(String checkmode) {
+        this.checkmode = checkmode;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/visitormanage/service/VisitormanageService.java b/src/main/java/com/supwisdom/dlpay/visitormanage/service/VisitormanageService.java
index 793d5ba..609ed6b 100644
--- a/src/main/java/com/supwisdom/dlpay/visitormanage/service/VisitormanageService.java
+++ b/src/main/java/com/supwisdom/dlpay/visitormanage/service/VisitormanageService.java
@@ -28,7 +28,10 @@
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean saveVisitorCheck(EVisitorCheckDtl bean);
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public boolean saveVisitorConf(EVisitorConfDtl bean);
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public EVisitorCheckDtl getVisitorCheckById(int id);
+    public EVisitorConfDtl getVisitorConfByConfid(int id);
     public EVisitorCheckDtl getVisitorCheckBySign(String sign);
 
 
diff --git a/src/main/java/com/supwisdom/dlpay/visitormanage/service/impl/VisitormanageServiceImpl.java b/src/main/java/com/supwisdom/dlpay/visitormanage/service/impl/VisitormanageServiceImpl.java
index 4374629..5b1268a 100644
--- a/src/main/java/com/supwisdom/dlpay/visitormanage/service/impl/VisitormanageServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/visitormanage/service/impl/VisitormanageServiceImpl.java
@@ -55,9 +55,20 @@
     }
 
     @Override
+    public boolean saveVisitorConf(EVisitorConfDtl bean) {
+        return visitorDao.saveVisitorConf(bean);
+    }
+
+    @Override
     public EVisitorCheckDtl getVisitorCheckById(int id) {
         return visitorDao.getVisitorCheckById(id);
     }
+
+    @Override
+    public EVisitorConfDtl getVisitorConfByConfid(int id) {
+        return visitorDao.getVisitorConfByConfid(id);
+    }
+
     @Override
     public EVisitorCheckDtl getVisitorCheckBySign(String sign) {
         return visitorDao.getVisitorCheckBySign(sign);
diff --git a/src/main/resources/templates/conference/conflist.html b/src/main/resources/templates/conference/conflist.html
index 202e880..1306d07 100644
--- a/src/main/resources/templates/conference/conflist.html
+++ b/src/main/resources/templates/conference/conflist.html
@@ -33,10 +33,10 @@
     {{# 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="people">分配人员</a>
-   <!-- <a class="layui-btn layui-btn layui-btn-xs" lay-event="detail">查看明细</a>-->
+    <a class="layui-btn layui-btn layui-btn-xs" lay-event="qrcode">申请开门码</a>
     {{# } else if(d.status=='unstart'&&d.conftype=='nolist'){ }}
     <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>-->
+    <a class="layui-btn layui-btn layui-btn-xs" lay-event="qrcode">申请开门码</a>
     {{# } }}
 
 </script>
@@ -172,10 +172,11 @@
                         layer.msg('请求失败了，请稍后再试', {icon: 2});
                     });
                 });*/
-            } else if ('detail' == obj.event) {
+            } else if ('qrcode' == obj.event) {
+                var conftime=data.starttime+'~'+data.endtime;
                 admin.popupCenter({
-                    title: "查看名单",
-                    path: '[[@{/conference/load4detail}]]?confid=' + data.confid,
+                    title: "申请开门码("+conftime+")",
+                    path: '[[@{/conference/load4qrcode}]]?confid=' + data.confid,
                     area: '600px',
                     finish: function () {
                         table.reload('conferenceTable');
diff --git a/src/main/resources/templates/conference/confqrcode.html b/src/main/resources/templates/conference/confqrcode.html
new file mode 100644
index 0000000..3edf132
--- /dev/null
+++ b/src/main/resources/templates/conference/confqrcode.html
@@ -0,0 +1,136 @@
+
+<div id="qrcode-form" lay-filter="qrcode-form-filter" class="layui-form model-form" style="padding: 10px 25px;">
+    <div class="layui-form-item">
+        <input type="hidden" id="qrcode-confid" th:value="${confid}"/>
+        <input type="hidden" id="myText" th:value="${qrcode}"/>
+        <div id="qrcode" class="qrcode-cc layui-input-inline" style="width: auto;margin-left: 150px" ></div>
+    </div>
+
+    <div class="layui-form-item">
+        <label class="confinput-label layui-form-label" style="width: 150px;"><span style="color: red" >* </span>有效时间段</label>
+        <div class="layui-input-inline" style="width: 100px;">
+            <input type="text" name="starttime" placeholder="9:00" id="form-qrcode-starttime" autocomplete="off"
+                   maxlength="5"
+                   class="layui-input" lay-verify="required"/>
+        </div>
+        <div class="layui-form-mid">-</div>
+        <div class="layui-input-inline" style="width: 100px;">
+            <input type="text" name="endtime" placeholder="12:00" id="form-qrcode-endtime" autocomplete="off"
+                   maxlength="5"
+                   class="layui-input" lay-verify="required"/>
+        </div>
+    </div>
+
+    <div class="layui-form-item model-form-footer">
+        <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+        <button class="layui-btn" lay-filter="qrcode-form-submit" lay-submit id="submitbtn">申请</button>
+    </div>
+</div>
+
+<script>
+
+    layui.use(['layer', 'admin', 'form', 'laydate', 'upload'], function () {
+        var layer = layui.layer;
+        var admin = layui.admin;
+        var form = layui.form;
+        var laydate = layui.laydate;
+
+
+        form.render("select");
+        laydate.render({
+            elem: '#form-qrcode-starttime',
+            type: 'time',
+            format: 'HH:mm',
+            trigger: 'click'
+        });
+        laydate.render({
+            elem: '#form-qrcode-endtime',
+            type: 'time',
+            format: 'HH:mm',
+            trigger: 'click'
+        });
+        var qcode = $("#myText").val();
+        createQrcode(qcode);
+
+        form.on('submit(qrcode-form-submit)', function (data) {
+            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;
+            } else if (vdata.endtime <= vdata.starttime) {
+                layer.msg("请正确选择时间段", {icon: 2, time: 1500});
+                return;
+            }
+            var formData = new FormData();
+            var confid=$("#qrcode-confid").val();
+            formData.append("starttime", vdata.starttime);
+            formData.append("endtime", vdata.endtime);
+            formData.append("confid", confid);
+
+            layer.load(2);
+            $.ajax({
+                type: "POST",
+                url: '[[@{/conference/getqrcode}]]',
+                dataType: 'json',
+                processData: false,
+                contentType: false,
+                data: formData,
+                headers: {
+                    'Accept': 'application/json',
+                    'X-CSRF-TOKEN': token,
+                },
+
+                success: function (result) {
+                    layer.closeAll('loading');
+                    if (result.code == 200) {
+
+                        createQrcode(result.msg);
+                        layer.msg("成功", {icon: 1, time: 1500});
+
+
+                    } else if (result.code == 401) {
+                        layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('[[@{/login}]]');
+                        }, 1000);
+                        return;
+                    } else if (result.code == 599) {
+                        //自定义错误
+                        layer.open({
+                            type: 0,
+                            title: "错误信息",
+                            icon: 2,
+                            area: ['600px', '400px'],
+                            content: result.msg
+                        });
+
+                    } else {
+                        layer.msg(result.msg, {icon: 2, time: 1500});
+                    }
+                },
+                error: function (err) {
+                    layer.msg("error", {icon: 2, time: 1500});
+                }
+            });
+
+        });
+
+
+    });
+
+    function  createQrcode(qcode) {
+
+        if (undefined != qcode && null != qcode && "" != qcode) {
+            var qrcode = new QRCode(document.getElementById("qrcode"), {
+                render : "canvas",
+                text: qcode,
+                width: 220,
+                height: 220,
+                colorDark: "#000000",
+                colorLight: "#ffffff",
+                correctLevel: QRCode.CorrectLevel.H
+            });
+        }
+    }
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/doorlist/customer/form.html b/src/main/resources/templates/doorlist/customer/form.html
index 7e3c7e0..bde6e88 100644
--- a/src/main/resources/templates/doorlist/customer/form.html
+++ b/src/main/resources/templates/doorlist/customer/form.html
@@ -22,7 +22,7 @@
         <label class="layui-form-label">人员类别</label>
         <div class="layui-input-block">
             <select name="custtypeid" id="customer-custtype" lay-verify="required">
-                <option th:each="type : ${typelist}" th:value="${type.custtypeid}">[[${type.custtypename}]]</option>
+                <option th:each="type : ${typelst}" th:value="${type.custtypeid}">[[${type.custtypename}]]</option>
             </select>
         </div>
     </div>
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html
index 8b34989..709d288 100755
--- a/src/main/resources/templates/index.html
+++ b/src/main/resources/templates/index.html
@@ -43,6 +43,7 @@
     <script type="text/javascript" th:src="@{/static/res/assets/plugins/element-ui/index.js}"></script>
     <script type="text/javascript" th:src="@{/static/res/assets/plugins/echarts/echarts.min.js}"></script>
     <script type="text/javascript" th:src="@{/static/res/assets/plugins/moment/moment.js}"></script>
+    <script type="text/javascript" th:src="@{/static/res/assets/js/qrcode.min.js}"></script>
 </head>
 
 <body class="layui-layout-body">
