diff --git a/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java b/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
index 92179ac..887a8f1 100644
--- a/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
+++ b/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
@@ -1,6 +1,5 @@
 package com.supwisdom.dlpay.app.controller;
 
-import com.supwisdom.dlpay.app.domain.EVisitorDtl;
 import com.supwisdom.dlpay.app.domain.VisitorConfig;
 import com.supwisdom.dlpay.app.domain.WechatResp;
 import com.supwisdom.dlpay.app.service.AppService;
@@ -23,12 +22,14 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
+import java.security.KeyPair;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import static jxl.biff.FormatRecord.logger;
-
 @Controller
 @RequestMapping("/app")
 public class AppController {
@@ -44,6 +45,8 @@
     private VisitormanageService visitormanageService;
     private String wechatURL, redirect, appid, appsecret;
 
+    private final String privatekeystring="MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAK9Zcfjepn4EJvCIvEa28UY6/PgZtyO1aRv9SXJmk3X9p4etO2MpWJUL6KLd6ZAIXuKn+qmejnrg3NiWpewvGqLOuz6x0PjA21AQlc/Gf+bVkRZfH8so/om6dv0w6KwDMuwZoXtVToM81Z1gNLdfVNBskOj7c1sEpNWOUOn6qY5DAgMBAAECgYEApJdEz+HOTcL/+g+fCpF18AI2qXsZ2L7Tpp4dbvCxwbMSqdwFPpL0vxKqjxXVwojY58/dDZHzE4w2QGdH32ZnjJKIfE5Li9xjPyS9V6fHe2Lttocns1QaFhMLzHA9tgnC+HK5bP9bAyd4SCsXkUIQDMf824ytkAPgxooYp0lF+aECQQDr+r7Gfjf/FjelxndTyxCaFXSO/DbTPeabzw2RXx/SARqlttABMi45R/JxIpny/5OVlgu4NbmApfRxTv2qaAJ1AkEAvjne/XOR7ojwO9DomTIaHyWQ2NotMltnQXjHo5+PlxS+s8elpiR6bIagv8OCvbXObRqkwm3Eu5LWFOd7vqXG1wJAU47YGqT64wJU9ghOnIcc+9J5EWBRcX9LtwQcA8uxEsV9UAxpnuLL51CIknL0HE1PTvpwb+vmIZ2h7rVPsRVfOQJBAJeXwMfUSNCCGohgpGwpTD3UDwlxXSFLTA8V9GrFpoVsx8i3ap/rZBCGfSY05UTP1NCHshMrrOMaUjbYfnng3IMCQApnWtHEMlDH/PVr4Ig0Jvf6NZ2VUSzM1lgcbE6L2M8w3hNZKYtM8oC0/PEGfh53KG7E+HpQa1m/flimvSNIFGs=";
+    private final String pubkeystring="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvWXH43qZ+BCbwiLxGtvFGOvz4GbcjtWkb/UlyZpN1/aeHrTtjKViVC+ii3emQCF7ip/qpno564NzYlqXsLxqizrs+sdD4wNtQEJXPxn/m1ZEWXx/LKP6Junb9MOisAzLsGaF7VU6DPNWdYDS3X1TQbJDo+3NbBKTVjlDp+qmOQwIDAQAB";
     @RequestMapping("/appindex")
     public String impdevindex(@RequestParam(value = "userid") String userId, Model model) {
         model.addAttribute("userId", userId);
@@ -143,6 +146,7 @@
         //qrcode="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appid+"&redirect_uri="+redirect+"%2fapp%2fqrcodevisitor%3finoutflag%3d"+inoutflag+"&response_type=code&scope=snsapi_userinfo&state=&connect_redirect=1#wechat_redirect";
         qrcode = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + redirect + "%2fapp%2fqrcodevisitor%3finoutflag%3d" + inoutflag + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
         model.addAttribute("qrcode", qrcode);
+        model.addAttribute("inoutflag", inoutflag);
         return "apph5/visitorcode";
     }
 
@@ -196,7 +200,7 @@
     }
 
     @ResponseBody
-    @RequestMapping(value = "/apply", method = {RequestMethod.POST})
+    @RequestMapping(value = "/apply/apply", method = {RequestMethod.POST})
     public Map applyforvisitor(@RequestBody VisitorCheckBean postData) {
         Map map = new HashMap();
 
@@ -215,23 +219,52 @@
             eVisitorCheckDtl.setIdno(postData.getIdno());
             eVisitorCheckDtl.setSex(postData.getSex());
             eVisitorCheckDtl.setTranstime(time.substring(8));
+            String s = StringUtil.getRandomString(18);
+            s+=time;
+            eVisitorCheckDtl.setSign(s);
+            eVisitorCheckDtl.setTotalcount(3);
+            eVisitorCheckDtl.setUsecount(0);
+            eVisitorCheckDtl.setQrcodetime(time);
+            eVisitorCheckDtl.setIsqrcode("1");
+            String sign="SIGNFORVISITOR"+s;
+            eVisitorCheckDtl.setQrcode(sign);
 
             boolean b = visitormanageService.saveVisitorCheck(eVisitorCheckDtl);
+
+
             if(b){
-                map.put("errStr", "");
+                EVisitorCheckDtl checkBySign = visitormanageService.getVisitorCheckBySign(sign);
+                int id = checkBySign.getId();
+                map.put("retcode", "0");
+                map.put("retmsg", "保存成功");
+                map.put("visitorid", id);
             }else {
-                map.put("errStr", "保存失败");
+                map.put("retcode", "99");
+                map.put("retmsg", "保存失败");
 
             }
         }catch (Exception e){
             e.printStackTrace();
-            map.put("errStr", "保存失败!");
+            map.put("retcode", "99");
+            map.put("retmsg", "系统错误!");
         }
 
         return map;
     }
 
-
+    @RequestMapping("/getapplyqrcode")
+    public String getapplycode(@RequestParam(value = "visitorid") int visitorid, Model model) {
+        String qrcode = "";
+        EVisitorCheckDtl visitorCheckById = visitormanageService.getVisitorCheckById(visitorid);
+        if(visitorCheckById!=null){
+            qrcode = visitorCheckById.getQrcode();
+        }
+        //qrcode="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appid+"&redirect_uri="+redirect+"%2fapp%2fqrcodevisitor%3finoutflag%3d"+inoutflag+"&response_type=code&scope=snsapi_userinfo&state=&connect_redirect=1#wechat_redirect";
+        //qrcode = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + redirect + "%2fapp%2fqrcodevisitor%3finoutflag%3d" + inoutflag + "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
+        model.addAttribute("qrcode", qrcode);
+        model.addAttribute("isapply", 1);
+        return "apph5/visitorcode";
+    }
     //根据设备名称模糊查询
     @ResponseBody
     @RequestMapping("/searchByDevName")
diff --git a/src/main/java/com/supwisdom/dlpay/app/dao/AppDao.java b/src/main/java/com/supwisdom/dlpay/app/dao/AppDao.java
index b82a5ef..a33d3c1 100644
--- a/src/main/java/com/supwisdom/dlpay/app/dao/AppDao.java
+++ b/src/main/java/com/supwisdom/dlpay/app/dao/AppDao.java
@@ -1,10 +1,10 @@
 package com.supwisdom.dlpay.app.dao;
 
 
-import com.supwisdom.dlpay.app.domain.EVisitorDtl;
 import com.supwisdom.dlpay.app.domain.EWechatAccount;
 import com.supwisdom.dlpay.app.domain.TAppDevFre;
 import com.supwisdom.dlpay.ncmgr.domain.TNcDevice;
+import com.supwisdom.dlpay.visitormanage.domain.EVisitorDtl;
 
 import java.util.List;
 
diff --git a/src/main/java/com/supwisdom/dlpay/app/dao/impl/AppDaoImpl.java b/src/main/java/com/supwisdom/dlpay/app/dao/impl/AppDaoImpl.java
index ea928cd..201e8f0 100644
--- a/src/main/java/com/supwisdom/dlpay/app/dao/impl/AppDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/app/dao/impl/AppDaoImpl.java
@@ -1,11 +1,10 @@
 package com.supwisdom.dlpay.app.dao.impl;
 
 import com.supwisdom.dlpay.app.dao.AppDao;
-import com.supwisdom.dlpay.app.domain.EVisitorDtl;
 import com.supwisdom.dlpay.app.domain.EWechatAccount;
 import com.supwisdom.dlpay.app.domain.TAppDevFre;
-import com.supwisdom.dlpay.ncmgr.domain.TBuilding;
 import com.supwisdom.dlpay.ncmgr.domain.TNcDevice;
+import com.supwisdom.dlpay.visitormanage.domain.EVisitorDtl;
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
diff --git a/src/main/java/com/supwisdom/dlpay/app/domain/EVisitorDtl.java b/src/main/java/com/supwisdom/dlpay/app/domain/EVisitorDtl.java
deleted file mode 100644
index c805a9b..0000000
--- a/src/main/java/com/supwisdom/dlpay/app/domain/EVisitorDtl.java
+++ /dev/null
@@ -1,162 +0,0 @@
-package com.supwisdom.dlpay.app.domain;
-
-import org.hibernate.annotations.GenericGenerator;
-
-import javax.persistence.*;
-
-/**
- * Created by shuwei on 17/6/12.
- */
-@Entity
-@Table(name = "E_VISITOR_DTL")
-public class EVisitorDtl {
-
-    private int id;
-    private String openid;
-    
-    private Integer status;
-    private String binddate;
-    private String nickname;
-    private String sex;
-    private String province;
-    private String city;
-    private String country;
-    private String headimgurl;
-    private String privilege;
-    private String unionid;
-    private Integer inoutflag;
-    private String transdate;
-    private String transtime;
-
-
-
-    @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 = "OPENID",length = 128)
-    public String getOpenid() {
-        return openid;
-    }
-
-    public void setOpenid(String openid) {
-        this.openid = openid;
-    }
-
-    @Column(name = "STATUS", length = 1)
-    public Integer getStatus() {
-        return status;
-    }
-
-    public void setStatus(Integer status) {
-        this.status = status;
-    }
-    @Column(name = "BINDDATE", length = 14)
-    public String getBinddate() {
-        return binddate;
-    }
-
-    public void setBinddate(String binddate) {
-        this.binddate = binddate;
-    }
-    @Column(name = "NICKNAME", length = 100)
-    public String getNickname() {
-        return nickname;
-    }
-
-    public void setNickname(String nickname) {
-        this.nickname = nickname;
-    }
-    @Column(name = "SEX", length = 1)
-    public String getSex() {
-        return sex;
-    }
-
-    public void setSex(String sex) {
-        this.sex = sex;
-    }
-    @Column(name = "PROVINCE", length = 60)
-    public String getProvince() {
-        return province;
-    }
-
-    public void setProvince(String province) {
-        this.province = province;
-    }
-    @Column(name = "CITY", length = 60)
-    public String getCity() {
-        return city;
-    }
-
-    public void setCity(String city) {
-        this.city = city;
-    }
-    @Column(name = "COUNTRY", length = 60)
-    public String getCountry() {
-        return country;
-    }
-
-    public void setCountry(String country) {
-        this.country = country;
-    }
-    @Column(name = "HEADIMGURL", length = 200)
-    public String getHeadimgurl() {
-        return headimgurl;
-    }
-
-    public void setHeadimgurl(String headimgurl) {
-        this.headimgurl = headimgurl;
-    }
-    @Column(name = "PRIVILEGE", length = 40)
-    public String getPrivilege() {
-        return privilege;
-    }
-
-    public void setPrivilege(String privilege) {
-        this.privilege = privilege;
-    }
-    @Column(name = "UNIONID", length = 128)
-    public String getUnionid() {
-        return unionid;
-    }
-
-    public void setUnionid(String unionid) {
-        this.unionid = unionid;
-    }
-    @Column(name = "INOUTFLAG", length = 1)
-    public Integer getInoutflag() {
-        return inoutflag;
-    }
-
-    public void setInoutflag(Integer inoutflag) {
-        this.inoutflag = inoutflag;
-    }
-    @Column(name = "TRANSDATE", length = 8)
-
-    public String getTransdate() {
-        return transdate;
-    }
-
-    public void setTransdate(String transdate) {
-        this.transdate = transdate;
-    }
-    @Column(name = "TRANSTIME", length = 6)
-
-    public String getTranstime() {
-        return transtime;
-    }
-
-    public void setTranstime(String transtime) {
-        this.transtime = transtime;
-    }
-}
diff --git a/src/main/java/com/supwisdom/dlpay/app/service/impl/AppServiceImpl.java b/src/main/java/com/supwisdom/dlpay/app/service/impl/AppServiceImpl.java
index 1cc093b..e5f7348 100644
--- a/src/main/java/com/supwisdom/dlpay/app/service/impl/AppServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/app/service/impl/AppServiceImpl.java
@@ -22,6 +22,7 @@
 import com.supwisdom.dlpay.ncmgr.dao.NcDeviceDao;
 import com.supwisdom.dlpay.ncmgr.domain.TNcDevice;
 import com.supwisdom.dlpay.util.RedisUtil;
+import com.supwisdom.dlpay.visitormanage.domain.EVisitorDtl;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.http.HttpStatus;
 import org.slf4j.Logger;
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
index 365e5ce..261d6d3 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
@@ -202,4 +202,22 @@
     return res;
   }
 
+
+  /**
+   * 获取指定长度随字符串
+   *
+   * @param length
+   * @return
+   */
+  public static String getRandomString(int length) {
+    String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+    Random random = new Random();
+    StringBuffer sb = new StringBuffer();
+    for (int i = 0; i < length; i++) {
+      int number = random.nextInt(62);
+      sb.append(str.charAt(number));
+    }
+    return sb.toString();
+  }
+
 }
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 7e6f387..f506fe9 100644
--- a/src/main/java/com/supwisdom/dlpay/visitormanage/dao/VisitorDao.java
+++ b/src/main/java/com/supwisdom/dlpay/visitormanage/dao/VisitorDao.java
@@ -19,4 +19,6 @@
     public PageResult<EVisitorDtl> getVisitorInfoPage(VisitorSearchBean param);
     public PageResult<VisitorShowBean> getCheckInfoPage(VisitorCheckSearchBean param);
     public boolean saveVisitorCheck(EVisitorCheckDtl bean);
+    public EVisitorCheckDtl getVisitorCheckById(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 421d5c7..ad5b2dd 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
@@ -28,7 +28,6 @@
     EntityManager entityManager;
 
 
-
     @Transactional
     @Override
     public PageResult<EVisitorDtl> getVisitorInfoPage(VisitorSearchBean param) {
@@ -42,34 +41,40 @@
         String countSql = "select count(*) as cnt from E_VISITOR_DTL a  " +
                 " where a.status='1' ";
 
-        if (!StringUtil.isEmpty(nickname)){
+        if (!StringUtil.isEmpty(nickname)) {
             sql += " and a.nickname like :nickname ";
             countSql += " and a.nickname like :nickname ";
-        }if (!StringUtil.isEmpty(inoutflag)){
+        }
+        if (!StringUtil.isEmpty(inoutflag)) {
             sql += " and a.inoutflag = :inoutflag ";
             countSql += " and a.inoutflag = :inoutflag ";
-        }if (!StringUtil.isEmpty(startdate)){
+        }
+        if (!StringUtil.isEmpty(startdate)) {
             sql += " and a.transdate >= :startdate ";
             countSql += " and a.transdate >= :startdate ";
-        }if (!StringUtil.isEmpty(enddate)){
+        }
+        if (!StringUtil.isEmpty(enddate)) {
             sql += " and a.transdate <= :enddate ";
             countSql += " and a.transdate <= :enddate ";
         }
-        sql +=" order by a.transtime desc ";
+        sql += " order by a.transtime desc ";
 
 
         Query query = entityManager.createNativeQuery(sql);
         Query countQuery = entityManager.createNativeQuery(countSql);
-        if (!StringUtil.isEmpty(nickname)){
-            query.setParameter("nickname", "%"+nickname+"%");
-            countQuery.setParameter("nickname", "%"+nickname+"%");
-        }if (!StringUtil.isEmpty(inoutflag)){
+        if (!StringUtil.isEmpty(nickname)) {
+            query.setParameter("nickname", "%" + nickname + "%");
+            countQuery.setParameter("nickname", "%" + nickname + "%");
+        }
+        if (!StringUtil.isEmpty(inoutflag)) {
             query.setParameter("inoutflag", Integer.parseInt(inoutflag));
             countQuery.setParameter("inoutflag", Integer.parseInt(inoutflag));
-        }if (!StringUtil.isEmpty(startdate)){
+        }
+        if (!StringUtil.isEmpty(startdate)) {
             query.setParameter("startdate", startdate);
             countQuery.setParameter("startdate", startdate);
-        }if (!StringUtil.isEmpty(enddate)){
+        }
+        if (!StringUtil.isEmpty(enddate)) {
             query.setParameter("enddate", enddate);
             countQuery.setParameter("enddate", enddate);
         }
@@ -81,6 +86,7 @@
         BigInteger count = (BigInteger) countQuery.getSingleResult();
         return new PageResult<>(count.longValue(), list);
     }
+
     @Transactional
     @Override
     public PageResult<VisitorShowBean> getCheckInfoPage(VisitorCheckSearchBean param) {
@@ -94,34 +100,40 @@
         String countSql = "select count(*) as cnt  from E_VISITOR_CHECK_DTL a left join t_customer b on a.custid=b.custid left join tb_dept c on c.deptcode=a.deptcode  " +
                 " where a.status='1' ";
 
-        if (!StringUtil.isEmpty(visitorname)){
+        if (!StringUtil.isEmpty(visitorname)) {
             sql += " and a.visitorname like :visitorname ";
             countSql += " and a.visitorname like :visitorname ";
-        }if (!StringUtil.isEmpty(sex)){
+        }
+        if (!StringUtil.isEmpty(sex)) {
             sql += " and a.sex = :sex ";
             countSql += " and a.sex = :sex ";
-        }if (!StringUtil.isEmpty(startdate)){
+        }
+        if (!StringUtil.isEmpty(startdate)) {
             sql += " and a.transdate >= :startdate ";
             countSql += " and a.transdate >= :startdate ";
-        }if (!StringUtil.isEmpty(enddate)){
+        }
+        if (!StringUtil.isEmpty(enddate)) {
             sql += " and a.transdate <= :enddate ";
             countSql += " and a.transdate <= :enddate ";
         }
-        sql +=" order by a.transtime desc ";
+        sql += " order by a.transtime desc ";
 
 
         Query query = entityManager.createNativeQuery(sql);
         Query countQuery = entityManager.createNativeQuery(countSql);
-        if (!StringUtil.isEmpty(visitorname)){
-            query.setParameter("visitorname", "%"+visitorname+"%");
-            countQuery.setParameter("visitorname", "%"+visitorname+"%");
-        }if (!StringUtil.isEmpty(sex)){
+        if (!StringUtil.isEmpty(visitorname)) {
+            query.setParameter("visitorname", "%" + visitorname + "%");
+            countQuery.setParameter("visitorname", "%" + visitorname + "%");
+        }
+        if (!StringUtil.isEmpty(sex)) {
             query.setParameter("sex", sex);
             countQuery.setParameter("sex", sex);
-        }if (!StringUtil.isEmpty(startdate)){
+        }
+        if (!StringUtil.isEmpty(startdate)) {
             query.setParameter("startdate", startdate);
             countQuery.setParameter("startdate", startdate);
-        }if (!StringUtil.isEmpty(enddate)){
+        }
+        if (!StringUtil.isEmpty(enddate)) {
             query.setParameter("enddate", enddate);
             countQuery.setParameter("enddate", enddate);
         }
@@ -133,17 +145,47 @@
         BigInteger count = (BigInteger) countQuery.getSingleResult();
         return new PageResult<>(count.longValue(), list);
     }
+
     @Transactional
     @Override
     public boolean saveVisitorCheck(EVisitorCheckDtl bean) {
-        boolean flag=false;
+        boolean flag = false;
         try {
             entityManager.persist(bean);
-            flag=true;
-        }catch (Exception e){
+            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  " +
+                " where a.id = ? and a.status = 1 ";
+        Query query = entityManager.createNativeQuery(sql, EVisitorCheckDtl.class);
+        query.setParameter(1, id);
+        List<EVisitorCheckDtl> 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  " +
+                " where a.sign = ? and a.status = 1 ";
+        Query query = entityManager.createNativeQuery(sql, EVisitorCheckDtl.class);
+        query.setParameter(1, sign);
+        List<EVisitorCheckDtl> list = query.getResultList();
+        if (list != null && list.size() > 0) {
+            return list.get(0);
+        }
+        return null;
+    }
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/visitormanage/domain/EVisitorCheckDtl.java b/src/main/java/com/supwisdom/dlpay/visitormanage/domain/EVisitorCheckDtl.java
index 3125c7a..3f047d4 100644
--- a/src/main/java/com/supwisdom/dlpay/visitormanage/domain/EVisitorCheckDtl.java
+++ b/src/main/java/com/supwisdom/dlpay/visitormanage/domain/EVisitorCheckDtl.java
@@ -43,6 +43,8 @@
 
     private String qrcode;
 
+    private String sign;
+
 
 
 
@@ -190,11 +192,6 @@
     }
 
 
-
-
-
-
-
     @Column(name = "QRCODE", length = 255)
 
     public String getQrcode() {
@@ -213,4 +210,12 @@
     public void setUsecount(Integer usecount) {
         this.usecount = usecount;
     }
+    @Column(name = "SIGN", length = 32)
+    public String getSign() {
+        return sign;
+    }
+
+    public void setSign(String sign) {
+        this.sign = sign;
+    }
 }
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 0527279..793d5ba 100644
--- a/src/main/java/com/supwisdom/dlpay/visitormanage/service/VisitormanageService.java
+++ b/src/main/java/com/supwisdom/dlpay/visitormanage/service/VisitormanageService.java
@@ -27,4 +27,9 @@
     PageResult<VisitorShowBean> getCheckInfoPage(VisitorCheckSearchBean bean);
     @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean saveVisitorCheck(EVisitorCheckDtl bean);
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
+    public EVisitorCheckDtl getVisitorCheckById(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 5e77a73..4374629 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
@@ -53,4 +53,13 @@
     public boolean saveVisitorCheck(EVisitorCheckDtl bean) {
         return visitorDao.saveVisitorCheck(bean);
     }
+
+    @Override
+    public EVisitorCheckDtl getVisitorCheckById(int id) {
+        return visitorDao.getVisitorCheckById(id);
+    }
+    @Override
+    public EVisitorCheckDtl getVisitorCheckBySign(String sign) {
+        return visitorDao.getVisitorCheckBySign(sign);
+    }
 }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/security.kt b/src/main/kotlin/com/supwisdom/dlpay/security.kt
index 65bcb2c..dadfafe 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/security.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/security.kt
@@ -124,6 +124,7 @@
                         .authorizeRequests()
                         .antMatchers("/api/auth/**").permitAll()
                         .antMatchers("/api/doorapi/**").permitAll()
+                        .antMatchers("/app/apply/**").permitAll()
                         .antMatchers("/api/conference/**").permitAll()
                         .antMatchers("/api/notify/**").permitAll()
                         .antMatchers("/api/common/**").hasAnyRole("THIRD_COMMON", "THIRD_ADMIN")
diff --git a/src/main/resources/templates/apph5/applyforvisitor.html b/src/main/resources/templates/apph5/applyforvisitor.html
index aba7390..c3715aa 100644
--- a/src/main/resources/templates/apph5/applyforvisitor.html
+++ b/src/main/resources/templates/apph5/applyforvisitor.html
@@ -206,20 +206,23 @@
     }
 
     function saveTempCustomer(_that, formdata, formName) {
+        var token = $("meta[name='_csrf_token']").attr("value");
         $.ajax({
             type: "post",
-            url: encodeURI("[[@{/app/apply}]]"),
+            url: encodeURI("[[@{/app/apply/apply}]]"),
             dataType: "json",
             contentType: "application/json",
             headers: {
                 'Accept': 'application/json',
-                'Content-Type': 'application/json'
+                'Content-Type': 'application/json',
+                'X-CSRF-TOKEN': token,
             },
             data: JSON.stringify(formdata),
             success: function (data) {
 
-                if (data.errcode != "0") {
-                    layer.msg(data.errStr, {icon: 2, time: 2000});
+                if (data.retcode != "0") {
+                    layer.msg(data.retmsg, {icon: 2, time: 2000});
+                    window.location = "[[@{/app/getapplyqrcode?visitorid=}]]"+data.visitorid;
                 } else {
                     layer.msg('登记成功!', {icon: 1, time: 1000});
                 }
diff --git a/src/main/resources/templates/apph5/visitorcode.html b/src/main/resources/templates/apph5/visitorcode.html
index 60edccd..5b84262 100644
--- a/src/main/resources/templates/apph5/visitorcode.html
+++ b/src/main/resources/templates/apph5/visitorcode.html
@@ -48,12 +48,21 @@
             });
         }
         var inoutflag = $("#inoutflag").val();
+        var isapply = $("#isapply").val();
 
         if (inoutflag == 1) {
             $("#title").text("进门登记码")
-        } else {
-            $("#title").text("出门登记码")
+        } else if(inoutflag == 2){
 
+                $("#title").text("出门登记码")
+
+        }else {
+            if(isapply==1){
+                $("#title").text("访客申请码")
+            }else {
+                $("#title").text("访客申请码")
+
+            }
         }
 
     });
@@ -74,6 +83,7 @@
 <div style="text-align: center;padding: 30px;">
     <input type="hidden" id="myText" th:value="${qrcode}"/>
     <input type="hidden" id="inoutflag" th:value="${inoutflag}"/>
+    <input type="hidden" id="isapply" th:value="${isapply}"/>
 </div>
 <div id="qrcode" class="qrcode-cc" ></div>
 <p style="text-align: center;margin-top:40px;color:#999;font-size: 14px">请将二维码对准扫描设备完成登记(如您使用扫一扫功能，请重新扫码)</p>
