diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index 56d209a..f7d9824 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -13,7 +13,7 @@
 spring.redis.host=172.28.201.101
 spring.redis.port=16379
 spring.redis.password=kingstar
-spring.redis.database=0
+spring.redis.database=2
 # jwt settings
 jwt.secret=Zj5taLomEbrM0lk+NMQZbHfSxaDU1wekjT+kiC3YzDw=
 # timeout seconds
diff --git a/src/main/java/com/supwisdom/dlpay/doorlist/service/impl/DoorlistMgrServiceImpl.java b/src/main/java/com/supwisdom/dlpay/doorlist/service/impl/DoorlistMgrServiceImpl.java
index d6b774f..e676a2b 100644
--- a/src/main/java/com/supwisdom/dlpay/doorlist/service/impl/DoorlistMgrServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/doorlist/service/impl/DoorlistMgrServiceImpl.java
@@ -80,25 +80,27 @@
     @Override
     public void syncNcCardlistByCardnoAndStatus(String cardno, String status, String tranStatus) {
         String now = DateUtil.getNow();
-        TNcCardlist cardlist = ncCardListDao.getNcCardlistByCardno(cardno);
+        List<TNcCardlist> cardlistByCardno = ncCardListDao.getNcCardlistByCardno(cardno);
         //1.判断此卡是否被下发
-        if (cardlist==null){
+        if (null == cardlistByCardno || cardlistByCardno.isEmpty()){
             return;
         }
         //2.判断下发状态，如果不一致则重新下发到设备
-        String flagTmp = "D";
-        if (status.equals("normal") && tranStatus.equals("normal")){
-            flagTmp="A";
+        for (TNcCardlist cardlist:cardlistByCardno) {
+            String flagTmp = "D";
+            if (status.equals("normal") && tranStatus.equals("normal")) {
+                flagTmp = "A";
+            }
+            if (cardlist.getOperflag().equals(flagTmp)) {
+                continue;
+            }
+            cardlist.setOperflag(flagTmp);
+            cardlist.setRectime(now);
+            cardlist.setVersion(cardlist.getVersion() + 1);
+            cardlist.setSyncflag("N");
+            cardlist.setSynctime("");
+            ncCardListDao.updateNcCardlist(cardlist);
         }
-        if (cardlist.getOperflag().equals(flagTmp)){
-            return;
-        }
-        cardlist.setOperflag(flagTmp);
-        cardlist.setRectime(now);
-        cardlist.setVersion(cardlist.getVersion()+1);
-        cardlist.setSyncflag("N");
-        cardlist.setSynctime("");
-        ncCardListDao.updateNcCardlist(cardlist);
 
     }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcCardListDao.java b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcCardListDao.java
index ffda9d6..c651d27 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcCardListDao.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcCardListDao.java
@@ -3,6 +3,8 @@
 import com.supwisdom.dlpay.ncmgr.domain.TNcCardlist;
 import com.supwisdom.dlpay.system.page.Pagination;
 
+import java.util.List;
+
 public interface NcCardListDao {
 
     public TNcCardlist getCleanList(int devid);
@@ -28,5 +30,5 @@
 
     public boolean updateNcCardlist(TNcCardlist bean);
 
-    public TNcCardlist getNcCardlistByCardno(String cardno);
+    public List<TNcCardlist> getNcCardlistByCardno(String cardno);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcCardListDaoImpl.java b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcCardListDaoImpl.java
index 7da5ced..dcb44ce 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcCardListDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcCardListDaoImpl.java
@@ -459,14 +459,11 @@
 
     @Transactional
     @Override
-    public TNcCardlist getNcCardlistByCardno(String cardno) {
-        String sql = " select bean from TNcCardlist bean where bean.operflag='A' and bean.cardno = :cardno ";
+    public List<TNcCardlist> getNcCardlistByCardno(String cardno) {
+        String sql = " select bean from TNcCardlist bean where bean.cardno = :cardno ";
         TypedQuery<TNcCardlist> query = entityManager.createQuery(sql, TNcCardlist.class);
         query.setParameter("cardno", cardno);
         List<TNcCardlist> list = query.getResultList();
-        if (list!=null && list.size()>0){
-            return list.get(0);
-        }
-        return null;
+        return list;
     }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/bean/PropertiesBean.java b/src/main/java/com/supwisdom/dlpay/system/bean/PropertiesBean.java
index 90d26f0..43058b1 100644
--- a/src/main/java/com/supwisdom/dlpay/system/bean/PropertiesBean.java
+++ b/src/main/java/com/supwisdom/dlpay/system/bean/PropertiesBean.java
@@ -13,6 +13,8 @@
     public int port;
     @Value("${spring.redis.password}")
     public String password;
+    @Value("${spring.redis.database}")
+    public int database;
 
     public String getHost() {
         return host;
@@ -37,4 +39,12 @@
     public void setPassword(String password) {
         this.password = password;
     }
+
+    public int getDatabase() {
+        return database;
+    }
+
+    public void setDatabase(int database) {
+        this.database = database;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/util/RedisUtil.java b/src/main/java/com/supwisdom/dlpay/util/RedisUtil.java
index 43859f5..6e05d77 100644
--- a/src/main/java/com/supwisdom/dlpay/util/RedisUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/util/RedisUtil.java
@@ -21,6 +21,7 @@
   private static String host;
   private static int port;
   private static String password;
+  private static int database;
 
 
   private static JedisPool jedisPool = null;
@@ -74,11 +75,15 @@
 
 
       if (StringUtils.isNotBlank(password)) {
-        jedisPool = new JedisPool(config, host, port, TIMEOUT, password);
-        log.info("host:" + host + "port:" + port + "password:" + password);
+        jedisPool = new JedisPool(config, host, port, TIMEOUT, password,database);
+        if (log.isInfoEnabled()) {
+          log.info("host:" + host + "port:" + port + "password:" + password + "database:" + database);
+        }
       } else {
-        jedisPool = new JedisPool(config, host, port, TIMEOUT);
-        log.info("host:" + host + "port:" + port);
+        jedisPool = new JedisPool(config, host, port, TIMEOUT,"",database);
+        if (log.isInfoEnabled()) {
+          log.info("host:" + host + "port:" + port +  "database:" + database);
+        }
       }
     } catch (Exception e) {
       if (jedisPool != null) {
@@ -96,6 +101,7 @@
     host = propertiesBean.getHost();
     port = propertiesBean.getPort();
     password = propertiesBean.getPassword();
+    database = propertiesBean.getDatabase();
     initialPool();
   }
 
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 55b3907..09f23c0 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -44,4 +44,6 @@
 ## quartz task scheduler
 sync.cardStatus.cron=0 0/10 * * * ?
 
+spring.redis.database=2
+
 
