diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 70e074a..6c0c15f 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -45,3 +45,5 @@
 visitor.secret=702d663e7685d0adc0a83673701c8878
 visitor.redirect=https%3a%2f%2fyy.dlsmk.cn%2fdoor
 
+visitor.deviceids=21,22,24,25,30,31,41,42,44,45
+
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 3a1305e..4070e8a 100644
--- a/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
+++ b/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
@@ -21,6 +21,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.*;
@@ -49,6 +50,8 @@
     @Autowired
     private WebInterfaceService webInterfaceService;
     private String wechatURL, redirect, appid, appsecret;
+    @Value("${visitor.deviceids}")
+    private String deviceids;
 
     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";
@@ -305,48 +308,53 @@
             if (b) {
                 //long listid = webInterfaceService.getNextSeqTDoorcardlst();
                 //从缓存读取列表值并加1
-                for(int n=10;n<=17;n++){
-                    long listid = RedisUtil.incr("seq_cardlist");
-                    TNcCardlist tmpCardlist = new TNcCardlist();
-                    tmpCardlist.setListid(listid + "");
-                    tmpCardlist.setCustid(s);
-                    tmpCardlist.setCustname(postData.getVisitorname());
-                    tmpCardlist.setCardno(s);
-                    tmpCardlist.setBankcardno("");
-                    tmpCardlist.setCardphyid("");
-                    tmpCardlist.setClosedate(lasttime);
-                    tmpCardlist.setDeviceid(n);
-                    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申请");
+                String[] ids = deviceids.split(",");
+                for (String idn : ids) {
+                    if(idn!=null&&!idn.equals("")){
+                        int n = Integer.parseInt(idn);
+                        long listid = RedisUtil.incr("seq_cardlist");
+                        TNcCardlist tmpCardlist = new TNcCardlist();
+                        tmpCardlist.setListid(listid + "");
+                        tmpCardlist.setCustid(s);
+                        tmpCardlist.setCustname(postData.getVisitorname());
+                        tmpCardlist.setCardno(s);
+                        tmpCardlist.setBankcardno("");
+                        tmpCardlist.setCardphyid("");
+                        tmpCardlist.setClosedate(lasttime);
+                        tmpCardlist.setDeviceid(n);
+                        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);
+                        tNcCardlists.add(tmpCardlist);
 
-                    //webInterfaceService.saveTDoorcardlst(tDoorcardlst);
-                    TNcAllottimeId tNcAllottimeId = new TNcAllottimeId();
-                    tNcAllottimeId.setListid(listid + "");
-                    tNcAllottimeId.setTimeid("1");
-                    TNcAllottime tNcAllottime = new TNcAllottime();
-                    tNcAllottime.setDeviceid(n);
-                    tNcAllottime.setId(tNcAllottimeId);
+                        //webInterfaceService.saveTDoorcardlst(tDoorcardlst);
+                        TNcAllottimeId tNcAllottimeId = new TNcAllottimeId();
+                        tNcAllottimeId.setListid(listid + "");
+                        tNcAllottimeId.setTimeid("1");
+                        TNcAllottime tNcAllottime = new TNcAllottime();
+                        tNcAllottime.setDeviceid(n);
+                        tNcAllottime.setId(tNcAllottimeId);
 
-                    tNcAllottimes.add(tNcAllottime);
-                    //long end1=System.currentTimeMillis(); //获取结束时间
-                    //System.out.println("程序运行时间： "+(end1-start1)+"ms");
+                        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();
+
+                    }
                 }
+                doorlistMgrService.batchSaveCardList(tNcCardlists);
+                doorlistMgrService.batchSaveAllotTime(tNcAllottimes);
+                tNcCardlists.clear();
+                tNcAllottimes.clear();
+                RedisUtil.incr("zcard_max_version");
+                tNcCardlists.clear();
 
             }
 
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 d58360f..735f54a 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java
@@ -31,6 +31,7 @@
 import com.supwisdom.dlpay.visitormanage.domain.EVisitorConfDtl;
 import com.supwisdom.dlpay.visitormanage.service.VisitormanageService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.core.annotation.AuthenticationPrincipal;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.stereotype.Controller;
@@ -64,6 +65,8 @@
     @Autowired
     DoorlistMgrService doorlistMgrService;
 
+    @Value("${visitor.deviceids}")
+    private String deviceids;
     @GetMapping("/conference/index")
     public String ConferenceView() {
         return "conference/conflist";
@@ -303,39 +306,45 @@
 
             //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申请");
+            String[] ids = deviceids.split(",");
+            for (String idn : ids) {
+                if(idn!=null&&!idn.equals("")){
+                    int n = Integer.parseInt(idn);
+                    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(n);
+                    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);
+                    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);
+                    //webInterfaceService.saveTDoorcardlst(tDoorcardlst);
+                    TNcAllottimeId tNcAllottimeId = new TNcAllottimeId();
+                    tNcAllottimeId.setListid("100"+listid );
+                    tNcAllottimeId.setTimeid("1");
+                    TNcAllottime tNcAllottime = new TNcAllottime();
+                    tNcAllottime.setDeviceid(n);
+                    tNcAllottime.setId(tNcAllottimeId);
 
-            tNcAllottimes.add(tNcAllottime);
-            //long end1=System.currentTimeMillis(); //获取结束时间
-            //System.out.println("程序运行时间： "+(end1-start1)+"ms");
+                    tNcAllottimes.add(tNcAllottime);
+                    //long end1=System.currentTimeMillis(); //获取结束时间
+                    //System.out.println("程序运行时间： "+(end1-start1)+"ms");
+                }
+            }
 
             doorlistMgrService.batchSaveCardList(tNcCardlists);
             doorlistMgrService.batchSaveAllotTime(tNcAllottimes);
