diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CardListDaoImpl.java b/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CardListDaoImpl.java
index cd6ed89..a936e97 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CardListDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CardListDaoImpl.java
@@ -50,31 +50,31 @@
             }
 
             if (!("").equals(devname)) {
-                queryString += " and b.devname like :devname";
+                queryString += " and b.devname like :devname ";
             }
             if (!("all").equals(operflag)) {
-                queryString += " and a.operflag =:operflag";
+                queryString += " and a.operflag =:operflag ";
             }
             if (!("").equals(buildingid)) {
                 queryString += " and b.buildingid = :buildingid ";
             }
             if (!regionid.equals("")){
-                queryString += "and b.regionid in  "
+                queryString += " and b.regionid in  "
                         +"("
                         + "with recursive tmp as  "
                         + "("
                         + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :regionid  "
                         + "union all  "
                         + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
-                        + ") select regionid from tmp  )";
+                        + ") select regionid from tmp  ) ";
             }
             if (!("").equals(custname)) {
-                queryString += " and a.custname like :custname";
+                queryString += " and a.custname like :custname ";
             }
             if (!("").equals(cardno)) {
-                queryString += " and a.cardno like :cardno";
+                queryString += " and a.cardno like :cardno ";
             }
-            queryString += " ORDER by a.listid DESC";
+            queryString += " ORDER by a.listid DESC ";
 
             Query query = entityManager.createNativeQuery(queryString, TDoorcardlstInfo.class);
 
@@ -193,7 +193,7 @@
             String queryString = "select count(*) from t_nc_cardlist a," +
                     " t_nc_device b "+
                     " left join tb_region c on b.regionid=c.regionid " +
-                    "where 1>0 and a.deviceid = b.deviceid ";
+                    " where 1>0 and a.deviceid = b.deviceid ";
 
             if (!"".equals(allocatStartDate)) {
                 queryString += " and a.rectime>=:allocatStartDate ";
@@ -202,32 +202,32 @@
                 queryString += " and a.rectime<=:allocatEndDate ";
             }
             if (!("all").equals(syncflag)) {
-                queryString += " and a.syncflag =:syncflag";
+                queryString += " and a.syncflag =:syncflag ";
             }
             if (!("all").equals(operflag)) {
-                queryString += " and a.operflag =:operflag";
+                queryString += " and a.operflag =:operflag ";
             }
             if (!("").equals(buildingid)) {
                 queryString += " and b.buildingid = :buildingid ";
             }
             if (!regionid.equals("")){
-                queryString += "and b.regionid in  "
+                queryString += " and b.regionid in  "
                         +"("
                         + "with recursive tmp as  "
                         + "("
                         + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :regionid  "
                         + "union all  "
                         + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
-                        + ") select regionid from tmp  )";
+                        + ") select regionid from tmp  ) ";
             }
             if (!("").equals(devname)) {
-                queryString += " and b.devname like :devname";
+                queryString += " and b.devname like :devname ";
             }
             if (!("").equals(custname)) {
-                queryString += " and a.custname like :custname";
+                queryString += " and a.custname like :custname ";
             }
             if (!("").equals(cardno)) {
-                queryString += " and a.cardno like :cardno";
+                queryString += " and a.cardno like :cardno ";
             }
             Query query = entityManager.createNativeQuery(queryString);
             if (!"".equals(allocatStartDate)) {
@@ -298,42 +298,31 @@
                 queryString += " and b.devname like :devname";
             }
             if (!("all").equals(operflag)) {
-                queryString += " and a.operflag =:operflag";
+                queryString += " and a.operflag = :operflag ";
             }
             if (!("").equals(buildingid)) {
                 queryString += " and b.buildingid = :buildingid ";
             }
 
-            if (!regionid.equals("")){
-                queryString += "and b.regionid in  "
+                queryString += " and b.regionid in  "
                         +"("
                         + "with recursive tmp as  "
                         + "("
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :operRegionid  "
+                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :regionid  "
                         + "union all  "
                         + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
-                        + ") select regionid from tmp  where tmp.regionid=:regionid)";
-            }else {
-                queryString += "and b.regionid in  "
-                        +"("
-                        + "with recursive tmp as  "
-                        + "("
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :operRegionid  "
-                        + "union all  "
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
-                        + ") select regionid from tmp  )";
-            }
+                        + ") select regionid from tmp  ) ";
+
             if (!("").equals(custname)) {
-                queryString += " and a.custname like :custname";
+                queryString += " and a.custname like :custname ";
             }
             if (!("").equals(cardno)) {
-                queryString += " and a.cardno like :cardno";
+                queryString += " and a.cardno like :cardno ";
             }
-            queryString += " ORDER by a.listid DESC";
+            queryString += " ORDER by a.listid DESC ";
 
             Query query = entityManager.createNativeQuery(queryString, TDoorcardlstInfo.class);
 
-            query.setParameter("operRegionid", operRegionid);
             if (!"".equals(allocatStartDate)) {
                 query.setParameter("allocatStartDate", allocatStartDate + "000000");
             }
@@ -356,6 +345,8 @@
             }
             if (!("").equals(regionid)){
                 query.setParameter("regionid", regionid);
+            }else {
+                query.setParameter("regionid", operRegionid );
             }
             if (!("").equals(custname)) {
                 query.setParameter("custname", "%" + custname + "%");
@@ -399,44 +390,32 @@
                 queryString += " and a.rectime<=:allocatEndDate ";
             }
             if (!("all").equals(syncflag)) {
-                queryString += " and a.syncstatus =:syncStatus";
+                queryString += " and a.syncstatus =:syncStatus ";
             }
             if (!("all").equals(operflag)) {
-                queryString += " and a.operflag =:operFlag";
+                queryString += " and a.operflag =:operFlag ";
             }
             if (!("").equals(buildingid)) {
                 queryString += " and b.buildingid = :buildingid ";
             }
-            if (!regionid.equals("")){
-                queryString += "and b.regionid in  "
+                queryString += " and b.regionid in  "
                         +"("
                         + "with recursive tmp as  "
                         + "("
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :operRegionid  "
+                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :regionid  "
                         + "union all  "
                         + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
-                        + ") select regionid from tmp  where tmp.regionid=:regionid)";
-            }else {
-                queryString += "and b.regionid in  "
-                        +"("
-                        + "with recursive tmp as  "
-                        + "("
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :operRegionid  "
-                        + "union all  "
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
-                        + ") select regionid from tmp  )";
-            }
+                        + ") select regionid from tmp  ) ";
             if (!("").equals(devname)) {
-                queryString += " and b.doorname like :devname";
+                queryString += " and b.doorname like :devname ";
             }
             if (!("").equals(custname)) {
-                queryString += " and a.custname like :custname";
+                queryString += " and a.custname like :custname ";
             }
             if (!("").equals(cardno)) {
-                queryString += " and a.stuempno like :cardno";
+                queryString += " and a.stuempno like :cardno ";
             }
             Query query = entityManager.createNativeQuery(queryString);
-            query.setParameter("operRegionid", operRegionid);
             if (!"".equals(allocatStartDate)) {
                 query.setParameter("allocatStartDate", allocatStartDate + "000000");
             }
@@ -459,6 +438,8 @@
             }
             if (!("").equals(regionid)){
                 query.setParameter("regionid", regionid);
+            }else {
+                query.setParameter("regionid" ,operRegionid );
             }
             if (!("").equals(custname)) {
                 query.setParameter("custname", "%" + custname + "%");
@@ -501,25 +482,25 @@
                 queryString += " and a.rectime<=:allocatEndDate ";
             }
             if (!("all").equals(syncflag)) {
-                queryString += " and a.syncflag =:syncflag";
+                queryString += " and a.syncflag =:syncflag ";
             }
             if (!("").equals(devname)) {
-                queryString += " and b.devname like :devname";
+                queryString += " and b.devname like :devname ";
             }
             if (!("all").equals(operflag)) {
-                queryString += " and a.operflag =:operflag";
+                queryString += " and a.operflag =:operflag ";
             }
             if (!("").equals(buildingid)) {
                 queryString += " and b.buildingid = :buildingid ";
             }
 
             if (!("").equals(custname)) {
-                queryString += " and a.custname like :custname";
+                queryString += " and a.custname like :custname ";
             }
             if (!("").equals(cardno)) {
-                queryString += " and a.cardno like :cardno";
+                queryString += " and a.cardno like :cardno ";
             }
-            queryString += " ORDER by a.listid DESC";
+            queryString += " ORDER by a.listid DESC ";
 
             Query query = entityManager.createNativeQuery(queryString, TDoorcardlstInfo.class);
             query.setParameter("operid", operid);
@@ -588,22 +569,22 @@
                 queryString += " and a.rectime<=:allocatEndDate ";
             }
             if (!("all").equals(syncflag)) {
-                queryString += " and a.syncflag =:syncflag";
+                queryString += " and a.syncflag =:syncflag ";
             }
             if (!("all").equals(operflag)) {
-                queryString += " and a.operflag =:operflag";
+                queryString += " and a.operflag =:operflag ";
             }
             if (!("").equals(buildingid)) {
                 queryString += " and b.buildingid = :buildingid ";
             }
             if (!("").equals(devname)) {
-                queryString += " and b.devname like :devname";
+                queryString += " and b.devname like :devname ";
             }
             if (!("").equals(custname)) {
-                queryString += " and a.custname like :custname";
+                queryString += " and a.custname like :custname ";
             }
             if (!("").equals(cardno)) {
-                queryString += " and a.cardno like :cardno";
+                queryString += " and a.cardno like :cardno ";
             }
             Query query = entityManager.createNativeQuery(queryString);
             query.setParameter("operid", operid);
@@ -665,34 +646,34 @@
                 queryString += " and a.rectime<=:allocatEndDate ";
             }
             if (!("all").equals(syncflag)) {
-                queryString += " and a.syncflag =:syncflag";
+                queryString += " and a.syncflag =:syncflag ";
             }
             if (!("").equals(devname)) {
-                queryString += " and b.devname like :devname";
+                queryString += " and b.devname like :devname ";
             }
             if (!("all").equals(operflag)) {
-                queryString += " and a.operflag =:operflag";
+                queryString += " and a.operflag =:operflag ";
             }
             if (!("").equals(buildingid)) {
-                queryString += " and b.buildingid = :buildingid";
+                queryString += " and b.buildingid = :buildingid ";
             }
             if (!regionid.equals("")){
-                queryString += "and b.regionid in  "
+                queryString += " and b.regionid in  "
                         +"("
                         + "with recursive tmp as  "
                         + "("
                         + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :regionid  "
                         + "union all  "
                         + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
-                        + ") select regionid from tmp  )";
+                        + ") select regionid from tmp  ) ";
             }
             if (!("").equals(custname)) {
-                queryString += " and a.custname like :custname";
+                queryString += " and a.custname like :custname ";
             }
             if (!("").equals(cardno)) {
-                queryString += " and a.cardno like :cardno";
+                queryString += " and a.cardno like :cardno ";
             }
-            queryString += " order by a.listid DESC";
+            queryString += " order by a.listid DESC ";
 
             Query query = entityManager.createNativeQuery(queryString, TDoorcardlstInfo.class);
             if (!"".equals(allocatStartDate)) {
@@ -812,48 +793,38 @@
                 queryString += " and a.rectime<=:allocatEndDate ";
             }
             if (!("all").equals(syncflag)) {
-                queryString += " and a.syncflag =:syncflag";
+                queryString += " and a.syncflag =:syncflag ";
             }
             if (!("").equals(devname)) {
-                queryString += " and b.devname like :devname";
+                queryString += " and b.devname like :devname ";
             }
             if (!("all").equals(operflag)) {
-                queryString += " and a.operflag =:operflag";
+                queryString += " and a.operflag =:operflag ";
             }
             if (!("").equals(buildingid)) {
-                queryString += " and b.buildingid = :buildingid";
+                queryString += " and b.buildingid = :buildingid ";
             }
-            if (!regionid.equals("")){
-                queryString += "and b.regionid in  "
-                        +"("
-                        + "with recursive tmp as  "
-                        + "("
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :operRegionid  "
-                        + "union all  "
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
-                        + ") select regionid from tmp  where tmp.regionid=:regionid)";
-            }else {
-                queryString += "and b.regionid in  "
+
+                queryString += " and b.regionid in  "
                     +"("
                     + "with recursive tmp as  "
                     + "("
-                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :operRegionid  "
+                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :regionid  "
                     + "union all  "
                     + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
-                    + ") select regionid from tmp )";
+                    + ") select regionid from tmp ) ";
 
-            }
+
             if (!("").equals(custname)) {
-                queryString += " and a.custname like :custname";
+                queryString += " and a.custname like :custname ";
             }
             if (!("").equals(cardno)) {
-                queryString += " and a.cardno like :cardno";
+                queryString += " and a.cardno like :cardno ";
             }
-            queryString += " order by a.listid DESC";
+            queryString += " order by a.listid DESC ";
 
             Query query = entityManager.createNativeQuery(queryString, TDoorcardlstInfo.class);
 
-            query.setParameter("operRegionid", operRegionid);
             if (!"".equals(allocatStartDate)) {
                 query.setParameter("allocatStartDate", allocatStartDate + "000000");
             }
@@ -876,6 +847,8 @@
             }
             if (!("").equals(regionid)){
                 query.setParameter("regionid", regionid);
+            }else {
+                query.setParameter("regionid" ,operRegionid );
             }
             if (!("").equals(custname)) {
                 query.setParameter("custname", "%" + custname + "%");
@@ -974,25 +947,25 @@
                 queryString += " and a.rectime<=:allocatEndDate ";
             }
             if (!("all").equals(syncflag)) {
-                queryString += " and a.syncflag =:syncflag";
+                queryString += " and a.syncflag =:syncflag ";
             }
             if (!("").equals(devname)) {
-                queryString += " and b.devname like :devname";
+                queryString += " and b.devname like :devname ";
             }
             if (!("all").equals(operflag)) {
-                queryString += " and a.operflag =:operflag";
+                queryString += " and a.operflag =:operflag ";
             }
             if (!("").equals(buildingid)) {
                 queryString += " and b.buildingid = :buildingid ";
             }
 
             if (!("").equals(custname)) {
-                queryString += " and a.custname like :custname";
+                queryString += " and a.custname like :custname ";
             }
             if (!("").equals(cardno)) {
-                queryString += " and a.cardno like :cardno";
+                queryString += " and a.cardno like :cardno ";
             }
-            queryString += " ORDER by a.listid DESC";
+            queryString += " ORDER by a.listid DESC ";
 
             Query query = entityManager.createNativeQuery(queryString, TDoorcardlstInfo.class);
             query.setParameter("operid", operid);
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/DoordtlDaoImpl.java b/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/DoordtlDaoImpl.java
index 3d675ce..047e876 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/DoordtlDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/DoordtlDaoImpl.java
@@ -54,7 +54,7 @@
                         + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :regionid  "
                         + "union all  "
                         + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
-                        + ") select regionid from tmp  )";
+                        + ") select regionid from tmp  ) ";
             }
             queryString += " order by a.transdate DESC";
             Query query = entityManager.createNativeQuery(queryString, TDoordtlInfo.class);
@@ -118,25 +118,16 @@
             if(!buildingid.equals("")){
                 queryString += " and e.buildingid = :buildingid ";
             }
-            if (!regionid.equals("")){
+
                 queryString += " and d.regionid in  "
                         +"("
                         + "with recursive tmp as  "
                         + "("
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :operRegionid  "
+                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :regionid  "
                         + "union all  "
                         + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
-                        + ") select regionid from tmp where tmp.regionid = :regionid )";
-            }else {
-                queryString += " and d.regionid in  "
-                        +"("
-                        + "with recursive tmp as  "
-                        + "("
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :operRegionid  "
-                        + "union all  "
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
-                        + ") select regionid from tmp )";
-            }
+                        + ") select regionid from tmp ) ";
+
             queryString += " order by transdate DESC";
             Query query = entityManager.createNativeQuery(queryString, TDoordtlInfo.class);
 
@@ -159,9 +150,10 @@
             if (!buildingid.equals("")) {
                 query.setParameter("buildingid", buildingid);
             }
-            query.setParameter("operRegionid", operRegionid);
             if(regionid.equals("")){
                 query.setParameter("regionid",regionid);
+            }else {
+                query.setParameter("regionid", operRegionid);
             }
             List<TDoordtlInfo> list = query.getResultList();
             return list;
@@ -348,7 +340,7 @@
                         + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :regionid  "
                         + "union all  "
                         + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
-                        + ") select regionid from tmp  )";
+                        + ") select regionid from tmp  ) ";
             }
             Query query = entityManager.createNativeQuery(queryString);
             query.setMaxResults(5);
@@ -416,25 +408,16 @@
             if(!buildingid.equals("")){
                 queryString += " and e.buildingid = :buildingid ";
             }
-            if (!regionid.equals("")){
-                queryString += " and d.regionid in  "
-                        +"("
-                        + "with recursive tmp as  "
-                        + "("
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :operRegionid  "
-                        + "union all  "
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
-                        + ") select regionid from tmp where tmp.regionid = :regionid )";
-            }else {
+
                 queryString += "and d.regionid in  "
                         +"("
                         + "with recursive tmp as  "
                         + "("
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :operRegionid  "
+                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :regionid  "
                         + "union all  "
                         + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
                         + ") select regionid from tmp )";
-            }
+
             queryString += " order by transdate DESC";
             Query query = entityManager.createNativeQuery(queryString, TDoordtlInfo.class);
 
@@ -457,9 +440,10 @@
             if (!buildingid.equals("")) {
                 query.setParameter("buildingid", buildingid);
             }
-            query.setParameter("operRegionid", operRegionid);
-            if(regionid.equals("")){
+            if(!regionid.equals("")){
                 query.setParameter("regionid",regionid);
+            }else {
+                query.setParameter("regionid" ,operRegionid );
             }
             pageNo = pageNo <= 0 ? 1 : pageNo;
             query.setFirstResult((pageNo - 1) * pageSize);
@@ -487,7 +471,7 @@
         try {
             String queryString = "select count(*) as cnt "
                     + " from t_doordtl a "
-                    + " left join t_card c on a.custid=c.custid, t_nc_device "
+                    + " left join t_card c on a.custid=c.custid, t_nc_device b "
                     + " left join tb_region d on b.regionid=d.regionid "
                     + " left join t_building e on b.buildingid=e.buildingid "
                     + " where 1>0 and cast(substr(a.doorid,5) as integer) = b.deviceid ";
@@ -510,25 +494,16 @@
             if(!buildingid.equals("")){
                 queryString += " and e.buildingid = :buildingid ";
             }
-            if (!regionid.equals("")){
+
                 queryString += " and d.regionid in  "
                         +"("
                         + "with recursive tmp as  "
                         + "("
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid like :operRegionid  "
-                        + "union all  "
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
-                        + ") select regionid from tmp where tmp.regionid=:regionid )";
-            }else {
-                queryString += "and tr.regionid in  "
-                        +"("
-                        + "with recursive tmp as  "
-                        + "("
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid like :operRegionid  "
+                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid like :regionid  "
                         + "union all  "
                         + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
                         + ") select regionid from tmp )";
-            }
+
             Query query = entityManager.createNativeQuery(queryString);
             query.setMaxResults(5);
             if (!startTranDate.equals("")) {
@@ -550,9 +525,11 @@
             if (!buildingid.equals("")) {
                 query.setParameter("buildingid", buildingid);
             }
-            query.setParameter("operRegionid", operRegionid);
+
             if(!regionid.equals("")){
                 query.setParameter("regionid",regionid);
+            }else {
+                query.setParameter("regionid", operRegionid);
             }
             List list = query.getResultList();
             int cnt = 0;
@@ -573,7 +550,7 @@
         String queryString = "select a.doorseqno,b.deviceid,b.devname,a.custname,c.cardno,c.cardphyid,c.bankcardno,a.transdate||a.transtime transdate, a.coldate||a.coltime coldate,"
                 + " case when a.status='' then '失败' else '成功' end status,a.dtldesc "
                 + " from t_doordtl a "
-                + " left join t_card c left join on a.custid=c.custid,t_nc_devcie b "
+                + " left join t_card c on a.custid=c.custid,t_nc_devcie b "
                 + " left join tb_region d on b.regionid=d.regionid "
                 + " left join t_building e on b.buildingid=e.buildingid "
                 + " left join t_operBuilding f on e.buildingid = f.buildingid "
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java b/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java
index 3b1120f..7bf505f 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java
@@ -102,7 +102,7 @@
                 map.put("buildings", buildings);
 
             }else if (opertype.equals("H") && !StringUtil.isEmpty(operUser.getRegionid())){
-                page = ncService.getOperatorNcDeviceWithPage(devname, pageNo, pageSize, buildingid, operUser.getRegionid(), devtype);
+                page = ncService.getOperatorNcDeviceWithPage(devname, pageNo, pageSize, buildingid, regionid, devtype,operUser.getRegionid());
                 map.put("PageResult", page);
                 regions = systemService.getRegionListById(operUser.getRegionid());
                 map.put("regions", regions);
@@ -191,7 +191,9 @@
             List<TBuilding> regionBuildings = null;
             if (operUser.getOpertype().equals("L")){
                 regionBuildings = systemService.getBuildingOperBuildingByRegionId(regionid, operUser.getOperid());
-            }else {
+            }else if(operUser.getOpertype().equals("H") && !StringUtil.isEmpty(operUser.getRegionid())){
+                regionBuildings = systemService.getBuildingByRegionId(operUser.getRegionid());
+            } else {
                 regionBuildings = systemService.getBuildingByRegionId(regionid);
             }
             map.put("reBuilding", regionBuildings);
@@ -1126,11 +1128,10 @@
             map.put("weektime", weektime);//时间周
             String opertype = operUser.getOpertype();
             List<TNcDevice> device = null;
-            if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))) {
+
                 device = ncService.findAllNcDevices();
-            }else if (!StringUtil.isEmpty(operUser.getRegionid())) {
-                device = ncService.findOperatorDevices(operUser.getRegionid());
-            }
+
+
             map.put("device", device);//设备
         } catch (Exception e) {
             e.printStackTrace();
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java
index 88def09..a7b5fd1 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java
@@ -11,6 +11,8 @@
 public interface NcDeviceDao {
     public Pagination getSystemNcDeviceWithPage(String devname, int pageNo, int pageSize, String buildingid,String regionid, String devtype);
 
+    public Pagination getOperatorNcDeviceWithPage(String devname,int pageNo,int pageSize, String buildingid,String regionid,String devtype,String operRegionid);
+
     public Pagination getBuildingOperNcDeviceWithPage(String devname,int pageNo,int pageSize,String buildingid,String devtype,String operid);
 
     public List<TBuilding> getAllBuilding();
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java
index 1a71ffd..a3623f0 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/impl/NcDeviceDaoImpl.java
@@ -29,10 +29,10 @@
                 +" left join tb_region tr on tr.regionid=tb.regionid"
                 +" where 1>0 and operflag='A'";
         if(!devname.equals("")){
-            sql+="and devname like :devname ";
+            sql+=" and devname like :devname ";
         }
         if(!buildingid.equals("")){
-            sql+="and  bean.buildingid = :buildingid ";
+            sql+=" and  bean.buildingid = :buildingid ";
         }
         if (!regionid.equals("")){
             sql += "and tr.regionid in  "
@@ -45,9 +45,9 @@
                     + ") select regionid from tmp  )";
         }
         if(!devtype.equals("")){
-            sql+="and  devtype = :devtype ";
+            sql+=" and  devtype = :devtype ";
         }
-        sql+="order by devtype";
+        sql+=" order by devtype";
         Query query = entityManager.createNativeQuery(sql,TNcDevice.class);
 
         if(!devname.equals("")){
@@ -80,25 +80,25 @@
         String sql ="select count(bean.deviceid) from T_Nc_Device bean "
                 +" left join t_building tb on bean.buildingid=tb.buildingid"
                 +" left join tb_region tr on tr.regionid=tb.regionid"
-                +" where 1>0 and operflag='A'";
+                +" where 1>0 and operflag='A' ";
         if(!devname.equals("")){
-            sql+="and bean.devname like :devname ";
+            sql+=" and bean.devname like :devname ";
         }
         if(!buildingid.equals("")){
-            sql+="and  bean.buildingid = :buildingid ";
+            sql+=" and  bean.buildingid = :buildingid ";
         }
         if (!regionid.equals("")){
-            sql += "and tr.regionid in  "
+            sql += " and tr.regionid in  "
                     +"("
                     + "with recursive tmp as  "
                     + "("
                     + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :regionid  "
                     + "union all  "
                     + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
-                    + ") select regionid from tmp  )";
+                    + ") select regionid from tmp  ) ";
         }
         if(!devtype.equals("")){
-            sql+="and  bean.devtype = :devtype ";
+            sql+=" and  bean.devtype = :devtype ";
         }
         Query query = entityManager.createNativeQuery(sql);
         if(!devname.equals("")){
@@ -123,6 +123,109 @@
 
     @Transactional
     @Override
+    public Pagination getOperatorNcDeviceWithPage(String devname, int pageNo, int pageSize, String buildingid, String regionid, String devtype, String operRegionid) {
+        String sql ="select * from T_Nc_Device bean "
+                +" left join t_building tb on bean.buildingid=tb.buildingid"
+                +" left join tb_region tr on tr.regionid=tb.regionid "
+                +" where 1>0 and operflag='A' ";
+        if(!devname.equals("")){
+            sql+=" and devname like :devname ";
+        }
+        if(!buildingid.equals("")){
+            sql+=" and  bean.buildingid = :buildingid ";
+        }
+
+            sql += " and tr.regionid in  "
+                    +"("
+                    + "with recursive tmp as  "
+                    + "("
+                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :regionid  "
+                    + "union all  "
+                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
+                    + ") select regionid from tmp  )";
+
+        if(!devtype.equals("")){
+            sql+=" and  devtype = :devtype ";
+        }
+        sql+=" order by devtype";
+        Query query = entityManager.createNativeQuery(sql,TNcDevice.class);
+
+        if(!devname.equals("")){
+            query.setParameter("devname", "%"+devname+"%");
+        }
+        if(!buildingid.equals("")){
+            query.setParameter("buildingid", buildingid);
+        }
+        if(!devtype.equals("")){
+            query.setParameter("devtype", devtype);
+        }
+        if (!("").equals(regionid)){
+            query.setParameter("regionid", regionid);
+        }else {
+            query.setParameter("regionid", operRegionid);
+        }
+        pageNo = pageNo <= 0 ? 1 : pageNo;
+        query.setFirstResult((pageNo - 1) * pageSize);
+        query.setMaxResults(pageSize);
+        Pagination page = new Pagination();
+        page.setPageNo(pageNo);
+        page.setPageSize(pageSize);
+        List<TNcDevice> list = query.getResultList();
+        page.setList(list);
+        int totalCount = getOperatorNcDeviceCount(devname, buildingid, regionid, devtype, operRegionid);
+        page.setTotalCount(totalCount);
+        return page;
+    }
+
+    private int getOperatorNcDeviceCount(String devname,String buildingid, String regionid, String devtype, String operRegionid){
+        String sql ="select count(bean.deviceid) from T_Nc_Device bean "
+                +" left join t_building tb on bean.buildingid=tb.buildingid"
+                +" left join tb_region tr on tr.regionid=tb.regionid"
+                +" where 1>0 and operflag='A' ";
+        if(!devname.equals("")){
+            sql+=" and bean.devname like :devname ";
+        }
+        if(!buildingid.equals("")){
+            sql+=" and  bean.buildingid = :buildingid ";
+        }
+
+            sql += " and tr.regionid in  "
+                    +"("
+                    + "with recursive tmp as  "
+                    + "("
+                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionid = :regionid  "
+                    + "union all  "
+                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  "
+                    + ") select regionid from tmp  ) ";
+
+        if(!devtype.equals("")){
+            sql+=" and  bean.devtype = :devtype ";
+        }
+        Query query = entityManager.createNativeQuery(sql);
+        if(!devname.equals("")){
+            query.setParameter("devname", "%"+devname+"%");
+        }
+        if(!buildingid.equals("")){
+            query.setParameter("buildingid", buildingid);
+        }
+        if(!devtype.equals("")){
+            query.setParameter("devtype", devtype);
+        }
+        if (!("").equals(regionid)){
+            query.setParameter("regionid", regionid);
+        }else {
+            query.setParameter("regionid", operRegionid);
+        }
+        List list = query.getResultList();
+        int cnt = 0;
+        if (list!=null && list.size()>0){
+            cnt = Integer.parseInt(list.get(0).toString());
+        }
+        return cnt;
+    }
+
+    @Transactional
+    @Override
     public Pagination getBuildingOperNcDeviceWithPage(String devname, int pageNo, int pageSize, String buildingid, String devtype,String operid) {
         String sql = "select * from T_NC_device bean "
                 +" left join t_building tb on bean.buildingid=tb.buildingid"
@@ -130,15 +233,15 @@
                 +" left join t_operbuilding tob on tob.buildingid=bean.buildingid "
                 +" where 1>0 and bean.operflag='A' and tob.operid = :operid ";
         if(!devname.equals("")){
-            sql+="and bean.devname like :devname ";
+            sql+=" and bean.devname like :devname ";
         }
         if(!buildingid.equals("")){
-            sql+="and  bean.buildingid = :buildingid ";
+            sql+=" and  bean.buildingid = :buildingid ";
         }
         if(!devtype.equals("")){
-            sql+="and  bean.devtype = :devtype ";
+            sql+=" and  bean.devtype = :devtype ";
         }
-        sql+="order by devtype";
+        sql+=" order by devtype";
         Query query = entityManager.createNativeQuery(sql,TNcDevice.class);
         query.setParameter("operid", operid);
         if(!devname.equals("")){
@@ -171,13 +274,13 @@
                 +" left join t_operbuilding tob on tob.buildingid=bean.buildingid "
                 +" where 1>0 and operflag='A' and tob.operid = :operid ";
         if(!devname.equals("")){
-            sql+="and bean.devname like :devname ";
+            sql+=" and bean.devname like :devname ";
         }
         if(!buildingid.equals("")){
-            sql+="and  bean.buildingid = :buildingid ";
+            sql+=" and  bean.buildingid = :buildingid ";
         }
         if(!devtype.equals("")){
-            sql+="and  bean.devtype = :devtype ";
+            sql+=" and  bean.devtype = :devtype ";
         }
         Query query = entityManager.createNativeQuery(sql);
         query.setParameter("operid", operid);
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java b/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
index 98d3680..017c47c 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
@@ -12,8 +12,8 @@
     //根据查询条件分页获取所有设备
     public Pagination getSystemNcDeviceWithPage(String devname, int pageNo, int pageSize, Map map, String buildingid,String regionid, String devtype);
 
-    //根据查询条件分页获取管理员设备--- 实际与管理员dao层方法一致，只是regionid传入管理员权限区域id
-    public Pagination getOperatorNcDeviceWithPage(String devname,int pageNo,int pageSize, String buildingid,String regionid,String devtype);
+    //根据查询条件分页获取管理员设备---
+    public Pagination getOperatorNcDeviceWithPage(String devname,int pageNo,int pageSize, String buildingid,String regionid,String devtype,String operRegionid);
 
     //根据查询条件分页获取楼栋管理员设备 ---regionid为空
     public Pagination getBuildingOperNcDeviceWithPage(String devname,int pageNo,int pageSize,String buildingid,String devtype,String operid);
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java b/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java
index 7b01829..68dae09 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/service/impl/NcServiceImpl.java
@@ -36,8 +36,8 @@
     }
 
     @Override
-    public Pagination getOperatorNcDeviceWithPage(String devname, int pageNo, int pageSize, String buildingid, String regionid, String devtype) {
-        return ncDeviceDao.getSystemNcDeviceWithPage(devname, pageNo, pageSize, buildingid, regionid, devtype);
+    public Pagination getOperatorNcDeviceWithPage(String devname, int pageNo, int pageSize, String buildingid, String regionid, String devtype,String operRegionid) {
+        return ncDeviceDao.getOperatorNcDeviceWithPage(devname, pageNo, pageSize, buildingid, regionid, devtype,operRegionid);
     }
 
     @Override
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java b/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
index 0e5c553..7c77c92 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/OperatorController.java
@@ -261,8 +261,15 @@
                               @AuthenticationPrincipal TOperator operUser){
         Map map = new HashMap();
         try{
-            Pagination page = managerService.getOperatorList(operid, realname, pageNo, pageSize);
-            map.put("PageResult", page);
+            Pagination page = null;
+            String opertype = operUser.getOpertype();
+            if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))){
+                page = managerService.getOperatorList(operid, realname, pageNo, pageSize);
+                map.put("PageResult", page);
+            }else {
+                page = managerService.getOperOperatorList(operUser.getOperid(), operid, realname, pageNo, pageSize);
+                map.put("PageResult", page);
+            }
         }catch (Exception e){
             e.printStackTrace();
         }
@@ -320,8 +327,14 @@
             List<TRole> roles = roleService.findAllRoles();
             map.put("roles", roles);
 
-            List<TRegion> regions = systemService.getAllRegions();
-            map.put("regions", regions);
+            List<TRegion> regions = null;
+            if (!StringUtil.isEmpty(operUser.getOpertype()) && (operUser.getOpertype().equals("P") || operUser.getOpertype().equals("S"))) {
+                regions = systemService.getAllRegions();
+                map.put("regions", regions);
+            }else if (!StringUtil.isEmpty(operUser.getRegionid())){
+                regions = systemService.getRegionListById(operUser.getRegionid());
+                map.put("regions", regions);
+            }
         }catch (Exception e){
             e.printStackTrace();
         }
diff --git a/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java b/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java
index a6086a4..000a4b8 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java
@@ -23,6 +23,7 @@
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -287,11 +288,31 @@
             List<TDictionaryId> dicts = systemService.findTDictionaryByType(6);//区域级别
             map.put("dicts", dicts);
             if (region!=null) {
-                List<TRegion> fRegion = systemService.getRegionListByLevel(region.getLevel());
-                map.put("fRegion", fRegion);
+                List<TRegion> fRegion = null;
+                if (!StringUtil.isEmpty(operUser.getOpertype()) && (operUser.getOpertype().equals("P") || operUser.getOpertype().equals("S"))) {
+                    fRegion = systemService.getRegionListByLevel(region.getLevel());
+                    map.put("fRegion", fRegion);
+                }else if (!StringUtil.isEmpty(operUser.getRegionid())){
+                    fRegion = systemService.getOperRegionListByLevel(region.getLevel(), operUser.getRegionid());
+                    //需添加其父区域填充显示数据
+                    TRegion parentRegion = systemService.getRegionById(region.getParentid());
+                    if (fRegion!=null) {
+                        fRegion.add(parentRegion);
+                    }else {
+                        fRegion = new ArrayList<>();
+                        fRegion.add(parentRegion);
+                    }
+                    map.put("fRegion", fRegion);
+                }
             }else {
-                List<TRegion> fRegion = systemService.getAllRegions();
-                map.put("fRegion", fRegion);
+                List<TRegion> fRegion = null;
+                if (!StringUtil.isEmpty(operUser.getOpertype()) && (operUser.getOpertype().equals("P") || operUser.getOpertype().equals("S"))) {
+                    fRegion = systemService.getAllRegions();
+                    map.put("fRegion", fRegion);
+                }else if (!StringUtil.isEmpty(operUser.getRegionid())){
+                    fRegion = systemService.getRegionListById(operUser.getRegionid());
+                    map.put("fRegion", fRegion);
+                }
             }
         }catch (Exception e){
             e.printStackTrace();
@@ -380,15 +401,24 @@
     /**
      * 获取选取区域等级的所有可选父区域
      * @param level
+     * @param operUser
      * @return
      */
     @ResponseBody
     @RequestMapping("/getFregion")
-    public Map getFregion(@RequestParam(value = "level")int level){
+    public Map getFregion(@RequestParam(value = "level") int level,
+                            @AuthenticationPrincipal TOperator operUser){
         Map map = new HashMap();
         try{
-            List<TRegion> parentRegion = systemService.getRegionListByLevel(level);
-            map.put("parentRegion", parentRegion);
+            List<TRegion> parentRegion = null;
+            String opertype = operUser.getOpertype();
+            if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))){
+                parentRegion = systemService.getRegionListByLevel(level);
+                map.put("parentRegion", parentRegion);
+            }else if (!StringUtil.isEmpty(operUser.getRegionid())){
+                parentRegion = systemService.getOperRegionListByLevel(level, operUser.getRegionid());
+                map.put("parentRegion", parentRegion);
+            }
         }catch (Exception e){
             e.printStackTrace();
         }
@@ -428,7 +458,7 @@
                 map.put("pageResult", page);
             }else if (opertype.equals("H") && !StringUtil.isEmpty(operUser.getRegionid())){
                 regionList = systemService.getRegionListById(operUser.getRegionid());
-                page = systemService.getSystemBuildingList(operUser.getRegionid(), buildingname, pageNo, pageSize);//regionid固定为管理员的权限区域id
+                page = systemService.getOperatorBuildingList(operUser.getRegionid(), regionid,buildingname, pageNo, pageSize);//regionid固定为管理员的权限区域id
                 map.put("pageResult", page);
             }else if (opertype.equals("L")){
                 page = systemService.getBuildingOperBuildingList(regionid, buildingname, operUser.getOperid(), pageNo, pageSize);
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/BuildingDao.java b/src/main/java/com/supwisdom/dlpay/system/dao/BuildingDao.java
index b2d7c68..404b11e 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/BuildingDao.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/BuildingDao.java
@@ -12,6 +12,8 @@
 
     public Pagination getSystemBuildingList(String regionid, String buildingname, int pageNo, int pageSize);
 
+    public Pagination getOperatorBuildingList(String operRegionid,String regionid,String buildingname,int pageNo,int pageSize);
+
     public Pagination getBuildingOperBuildingList(String regionid,String buildingname,String operid,int pageNo,int pageSize);
 
     public TBuilding getBuildingById(String buildingid);
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/ManagerDao.java b/src/main/java/com/supwisdom/dlpay/system/dao/ManagerDao.java
index a594e37..5f8798a 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/ManagerDao.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/ManagerDao.java
@@ -9,6 +9,9 @@
 
     Pagination getOperatorList(String operid, String realname, int pageNo, int pageSize);
 
+    Pagination getOperOperatorList(String operatorOperid,String operid, String realname, int pageNo, int pageSize);
+
+
     boolean updateOperatorStatusById(String operid);
 
     TOperator getOperatorById(String operid);
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/RegionDao.java b/src/main/java/com/supwisdom/dlpay/system/dao/RegionDao.java
index 75847c4..da117c5 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/RegionDao.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/RegionDao.java
@@ -21,6 +21,8 @@
 
     public List<TRegion> getRegionListByLevel(int level);
 
+    public List<TRegion> getOperRegionListByLevel(int level,String regionid);
+
     public List<TRegion> getAllRegions();
 
     public TRegion getRegionByName(String regionname);
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/impl/BuildingDaoImpl.java b/src/main/java/com/supwisdom/dlpay/system/dao/impl/BuildingDaoImpl.java
index a1a8f79..e8ab4eb 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/impl/BuildingDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/impl/BuildingDaoImpl.java
@@ -77,6 +77,7 @@
     }
 
 
+
     private int getSystemBuildingListCount(String regionid,String buildingname){
         String sql = "select count(*) from T_Building bean where 1>0 and bean.flag='A' ";
         if (!StringUtil.isEmpty(regionid)){
@@ -106,6 +107,74 @@
 
     @Transactional
     @Override
+    public Pagination getOperatorBuildingList(String operRegionid, String regionid, String buildingname, int pageNo, int pageSize) {
+        String sql = "select bean.buildingid,bean.buildingname,bean.synctime,bean.updtime,bean.flag,bean.buildingdesc,bean.regionid " +
+                " from T_Building bean where 1>0 and bean.flag='A' ";
+
+            sql += "and bean.regionid in  " +
+                    "( with recursive tmp as  ( select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr " +
+                    " where regionid= :regionid union all  select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid ) " +
+                    "  select regionid from tmp  )";
+
+
+        if (!StringUtil.isEmpty(buildingname)){
+            sql += " and bean.buildingname like :buildingname";
+        }
+        sql += " order by bean.buildingid";
+
+        Query query = entityManager.createNativeQuery(sql, TBuilding.class);
+        if (!StringUtil.isEmpty(regionid)){
+            query.setParameter("regionid", regionid );
+        }else {
+            query.setParameter("regionid", operRegionid);
+        }
+        if (!StringUtil.isEmpty(buildingname)){
+            query.setParameter("buildingname", "%"+buildingname+"%");
+        }
+
+        pageNo = pageNo <= 0 ? 1 : pageNo;
+        query.setFirstResult((pageNo - 1) * pageSize);
+        query.setMaxResults(pageSize);
+        Pagination page = new Pagination();
+        page.setPageNo(pageNo);
+        page.setPageSize(pageSize);
+        List<TBuilding> list = query.getResultList();
+        page.setList(list);
+        int totalCount = getOperatorBuildingListCount(operRegionid,regionid,buildingname);
+        page.setTotalCount(totalCount);
+        return page;
+    }
+
+    private int getOperatorBuildingListCount(String operRegionid, String regionid, String buildingname){
+        String sql = "select count(*) from T_Building bean where 1>0 and bean.flag='A' ";
+
+            sql += "and bean.regionid in  " +
+                    "(with recursive tmp as  (select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr " +
+                    " where regionid= :regionid union all  select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  " +
+                    " ) select regionid from tmp  )";
+
+        if (!StringUtil.isEmpty(buildingname)){
+            sql += " and bean.buildingname like :buildingname";
+        }
+        Query query = entityManager.createNativeQuery(sql);
+        if (!StringUtil.isEmpty(regionid)){
+            query.setParameter("regionid", regionid );
+        }else {
+            query.setParameter("regionid", operRegionid);
+        }
+        if (!StringUtil.isEmpty(buildingname)){
+            query.setParameter("buildingname", "%"+buildingname+"%");
+        }
+        int cnt=0;
+        List list = query.getResultList();
+        if (list!=null && list.size()>0){
+            cnt = Integer.parseInt(list.get(0).toString());
+        }
+        return cnt;
+    }
+
+    @Transactional
+    @Override
     public Pagination getBuildingOperBuildingList(String regionid, String buildingname, String operid, int pageNo, int pageSize) {
         // 楼栋管理员regionid为空
         String sql = "select bean.buildingid,bean.buildingname,bean.synctime,bean.updtime,bean.flag,bean.buildingdesc,bean.regionid "+
@@ -139,6 +208,7 @@
             sql += " and bean.buildingname like :buildingname";
         }
         Query query = entityManager.createNativeQuery(sql);
+        query.setParameter("operid", operid);
         if (!StringUtil.isEmpty(buildingname)){
             query.setParameter("buildingname", "%"+buildingname+"%");
         }
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/impl/DictionaryDaoImpl.java b/src/main/java/com/supwisdom/dlpay/system/dao/impl/DictionaryDaoImpl.java
index 9e8e002..4655310 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/impl/DictionaryDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/impl/DictionaryDaoImpl.java
@@ -140,7 +140,7 @@
         }else if (opertype.equals("H")){
             sql +=" and bean.id.dictval<>'P' and bean.id.dictval<>'S' and bean.id.dictval<>'H'";
         }else {
-            sql +=" and bean.id.dictval == 'L'";
+            sql +=" and bean.id.dictval = 'L' ";
         }
         TypedQuery<TDictionaryId> query = entityManager.createQuery(sql, TDictionaryId.class);
         List<TDictionaryId> list = query.getResultList();
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/impl/ManagerDaoImpl.java b/src/main/java/com/supwisdom/dlpay/system/dao/impl/ManagerDaoImpl.java
index 5a8e6a1..3a40774 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/impl/ManagerDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/impl/ManagerDaoImpl.java
@@ -62,6 +62,7 @@
         return page;
     }
 
+
     private int getOperatorListCount(String operid, String realname){
         String sql = "select count(*) from tb_operator a " +
                 " left join tb_oper_role b on a.operid = b.operid " +
@@ -93,6 +94,79 @@
         return cnt;
     }
 
+    @Transactional
+    @Override
+    public Pagination getOperOperatorList(String operatorOperid, String operid, String realname, int pageNo, int pageSize) {
+        String sql = "select a.operid,a.opername,a.opertype,a.realname,a.regionid,a.mobile,a.foperid,c.roleid,c.rolename,d.regionname " +
+                " from Tb_Operator a " +
+                " left join tb_oper_role b on a.operid = b.operid " +
+                " left join tb_role c on b.roleid = c.roleid " +
+                " left join tb_region d on a.regionid = d.regionid " +
+                " where 1>0 and a.status='normal' and (a.operid=:operatorOperid or a.foperid=:operatorOperid) ";
+        if (!StringUtil.isEmpty(operid)){
+            sql += " and a.operid = :operid ";
+        }
+
+        if (!StringUtil.isEmpty(realname)){
+            sql += " and a.realname like :realname ";
+        }
+
+        sql += " order by a.operid";
+        Query query = entityManager.createNativeQuery(sql, OperatorListBean.class);
+        query.setParameter("operatorOperid" , operatorOperid);
+        if (!StringUtil.isEmpty(operid)){
+            query.setParameter("operid", operid);
+        }
+
+        if (!StringUtil.isEmpty(realname)){
+            query.setParameter("realname", "%"+realname+"%");
+        }
+        pageNo = pageNo <= 0 ? 1 : pageNo;
+        query.setFirstResult((pageNo - 1) * pageSize);
+        query.setMaxResults(pageSize);
+        Pagination page = new Pagination();
+        page.setPageNo(pageNo);
+        page.setPageSize(pageSize);
+        List<OperatorListBean> list = query.getResultList();
+        page.setList(list);
+        int totalCount = getOperOperatorListCount(operatorOperid,operid, realname);
+        page.setTotalCount(totalCount);
+        return page;
+    }
+
+    private int getOperOperatorListCount(String operatorOperid, String operid, String realname){
+        String sql = "select count(*) from tb_operator a " +
+                " left join tb_oper_role b on a.operid = b.operid " +
+                " left join tb_role c on b.roleid = c.roleid " +
+                " left join tb_region d on a.regionid = d.regionid " +
+                "where a.status='normal' and (a.operid=:operatorOperid or a.foperid=:operatorOperid) ";
+
+        if (!StringUtil.isEmpty(operid)){
+            sql += " and a.operid = :operid ";
+        }
+
+        if (!StringUtil.isEmpty(realname)){
+            sql += " and a.realname like :realname ";
+        }
+
+        Query query = entityManager.createNativeQuery(sql);
+        query.setParameter("operatorOperid" , operatorOperid);
+        if (!StringUtil.isEmpty(operid)){
+            query.setParameter("operid", operid);
+        }
+
+        if (!StringUtil.isEmpty(realname)){
+            query.setParameter("realname", "%"+realname+"%");
+        }
+        int cnt=0;
+        List list = query.getResultList();
+        if (list!=null && list.size()>0){
+            cnt = Integer.parseInt(list.get(0).toString());
+        }
+        return cnt;
+    }
+
+
 
     @Transactional
     @Override
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/impl/RegionDaoImpl.java b/src/main/java/com/supwisdom/dlpay/system/dao/impl/RegionDaoImpl.java
index f865cdb..82c252a 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/impl/RegionDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/impl/RegionDaoImpl.java
@@ -195,6 +195,25 @@
 
     @Transactional
     @Override
+    public List<TRegion> getOperRegionListByLevel(int level, String regionid) {
+        String sql = "select bean.regionid,bean.address,bean.level,bean.parentid,bean.regionname,bean.remarks,bean.parentname,bean.flag " +
+                "from TB_REGION bean where flag=1 and bean.level = :level "+
+                " and bean.regionid in  " +
+                "(with recursive tmp as  (select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr " +
+                " where regionid= :regionid union all  select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr inner join tmp t on t.regionid=tbr.parentid  " +
+                " ) select regionid from tmp  )";
+        Query query = entityManager.createNativeQuery(sql, TRegion.class);
+        query.setParameter("level" , level-1);
+        query.setParameter("regionid", regionid);
+        List<TRegion> list = query.getResultList();
+        if (list!=null && list.size()>0){
+            return list;
+        }
+        return null;
+    }
+
+    @Transactional
+    @Override
     public List<TRegion> getAllRegions() {
         String sql = "select bean from TRegion bean where bean.flag = 1";
         TypedQuery<TRegion> query = entityManager.createQuery(sql, TRegion.class);
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/ManagerService.java b/src/main/java/com/supwisdom/dlpay/system/service/ManagerService.java
index c7a013e..e4a5f06 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/ManagerService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/ManagerService.java
@@ -10,6 +10,10 @@
     //分页获取所有操作员列表
     Pagination getOperatorList(String operid, String realname, int pageNo, int pageSize);
 
+    //分页获取区域管理员权限下操作员列表
+    Pagination getOperOperatorList(String operatorOperid,String operid, String realname, int pageNo, int pageSize);
+
+
     //根据id删除操作员 -- 实际修改状态status为close
     boolean deleteOperatorById(String operid);
 
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java b/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java
index 0fd04c9..6dca35c 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java
@@ -59,6 +59,9 @@
     //根据区域级别获取其上一级级别的所有区域
     public List<TRegion> getRegionListByLevel(int level);
 
+    //根据区域级别获取其权限下上一级级别的区域
+    public List<TRegion> getOperRegionListByLevel(int level,String regionid);
+
     //获取所有区域
     public List<TRegion> getAllRegions();
 
@@ -78,6 +81,9 @@
     //根据查询条件分页获取所有楼栋
     public Pagination getSystemBuildingList(String regionid,String buildingname,int pageNo,int pageSize);
 
+    //根据查询条件分页获取区域管理员权限下所有楼栋
+    public Pagination getOperatorBuildingList(String operRegionid,String regionid,String buildingname,int pageNo,int pageSize);
+
     //分页获取楼栋管理员权限内楼栋
     public Pagination getBuildingOperBuildingList(String regionid,String buildingname,String operid,int pageNo,int pageSize);
 
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/ManagerServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/ManagerServiceImpl.java
index 793769d..5410b55 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/ManagerServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/ManagerServiceImpl.java
@@ -20,6 +20,12 @@
     }
 
     @Override
+    public Pagination getOperOperatorList(String operatorOperid, String operid, String realname, int pageNo, int pageSize) {
+        return managerDao.getOperOperatorList(operatorOperid, operid, realname, pageNo, pageSize);
+    }
+
+
+    @Override
     public boolean deleteOperatorById(String operid) {
         return managerDao.updateOperatorStatusById(operid);
     }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/SystemServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/SystemServiceImpl.java
index d1d6679..ca4f176 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/SystemServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/SystemServiceImpl.java
@@ -115,6 +115,11 @@
     }
 
     @Override
+    public List<TRegion> getOperRegionListByLevel(int level, String regionid) {
+        return regionDao.getOperRegionListByLevel(level, regionid);
+    }
+
+    @Override
     public List<TRegion> getAllRegions() {
         return regionDao.getAllRegions();
     }
@@ -146,6 +151,11 @@
     }
 
     @Override
+    public Pagination getOperatorBuildingList(String operRegionid, String regionid, String buildingname, int pageNo, int pageSize) {
+        return buildingDao.getOperatorBuildingList(operRegionid, regionid, buildingname, pageNo, pageSize);
+    }
+
+    @Override
     public Pagination getBuildingOperBuildingList(String regionid, String buildingname, String operid, int pageNo, int pageSize) {
         return buildingDao.getBuildingOperBuildingList(regionid, buildingname, operid, pageNo, pageSize);
     }
diff --git a/src/main/resources/templates/doorlist/searchDoorlist.html b/src/main/resources/templates/doorlist/searchDoorlist.html
index ce46dc8..6f4d31c 100644
--- a/src/main/resources/templates/doorlist/searchDoorlist.html
+++ b/src/main/resources/templates/doorlist/searchDoorlist.html
@@ -387,15 +387,25 @@
                         })
                     }
                     var regionlist = [];
+                    regionlist.push({
+                        value:'',
+                        label:'全部'
+                    });
                     var region = data.regions;
-                    for (var i = 0; i < region.length; i++) {
-                        regionlist.push({
-                            value: region[i]["regionid"],
-                            label: region[i]["regionname"]
-                        })
+                    if(region!=null) {
+                        for (var i = 0; i < region.length; i++) {
+                            regionlist.push({
+                                value: region[i]["regionid"],
+                                label: region[i]["regionname"]
+                            })
+                        }
                     }
 
                     var buildinglist = [];
+                    buildinglist.push({
+                        value:'',
+                        label:'全部'
+                    });
                     var building = data.buildings;
                     for (var i = 0; i < building.length; i++) {
                         buildinglist.push({
@@ -549,6 +559,10 @@
             url: encodeURI("[[@{/ncmgr/getRegionBuilding?regionid=}]]" + value),
             success: function (ret) {
                 var bList = [];
+                bList.push({
+                    value:'',
+                    label:'全部'
+                });
                 var rB = ret.reBuilding;
                 if (rB!=null) {
                     for (var j = 0; j < rB.length; j++) {
diff --git a/src/main/resources/templates/query/tdoorstream.html b/src/main/resources/templates/query/tdoorstream.html
index e705d98..58ff021 100644
--- a/src/main/resources/templates/query/tdoorstream.html
+++ b/src/main/resources/templates/query/tdoorstream.html
@@ -273,15 +273,25 @@
                         });
                     }
                     var regionlist = [];
+                    regionlist.push({
+                        value:'',
+                        label:'全部'
+                    });
                     var region = ret.regions;
-                    for (var i = 0; i < region.length; i++) {
-                        regionlist.push({
-                            value: region[i]["regionid"],
-                            label: region[i]["regionname"]
-                        })
+                    if (region!=null) {
+                        for (var i = 0; i < region.length; i++) {
+                            regionlist.push({
+                                value: region[i]["regionid"],
+                                label: region[i]["regionname"]
+                            })
+                        }
                     }
 
                     var buildinglist = [];
+                    buildinglist.push({
+                        value:'',
+                        label:'全部'
+                    });
                     var building = ret.buildings;
                     for (var i = 0; i < building.length; i++) {
                         buildinglist.push({
@@ -400,6 +410,10 @@
             url: encodeURI("[[@{/ncmgr/getRegionBuilding?regionid=}]]" + value),
             success: function (ret) {
                 var bList = [];
+                bList.push({
+                    value:'',
+                    label:'全部'
+                });
                 var rB = ret.reBuilding;
                 if (rB!=null) {
                     for (var j = 0; j < rB.length; j++) {
diff --git a/src/main/resources/templates/system/building.html b/src/main/resources/templates/system/building.html
index 3fd4a33..88fcc86 100644
--- a/src/main/resources/templates/system/building.html
+++ b/src/main/resources/templates/system/building.html
@@ -14,7 +14,7 @@
                         <label class="control-label col-md-5 col-sm-12 col-xs-12" style="font-size: 14px;">区域:</label>
                         <div class="col-md-7 col-sm-12 col-xs-12">
                             <el-select style="width:193px"
-                                       v-model="buildingform.regionid" placeholder="请选择"
+                                       v-model="buildingform.regionid" clearable placeholder="请选择"
                             > <el-option v-for="item in regionlist"
                                          :key="item.value" :label="item.label" :value="item.value">
                             </el-option> </el-select>
@@ -259,6 +259,10 @@
                     if (ret.regionList!=null) {
                         var rlist = ret.regionList;
                         var rows = [];
+                        rows.push({
+                            value:'',
+                            label:'全部'
+                        });
                         for (var i=0;i<rlist.length;i++){
                             rows.push({
                                 value: rlist[i].regionid,
diff --git a/src/main/resources/templates/system/region.html b/src/main/resources/templates/system/region.html
index b044811..24d1b2f 100644
--- a/src/main/resources/templates/system/region.html
+++ b/src/main/resources/templates/system/region.html
@@ -276,6 +276,7 @@
                     this.parentRegionDis = true;
                 } else  {
                     this.parentRegionDis = false;
+                    this.parentRegions = [];
                     region_getFregion(this,value);
                 }
             },
@@ -359,6 +360,18 @@
                 }
                 _self.levels = dictlist;
 
+                var fRegion = ret.fRegion;
+                for (var j=0;j<fRegion.length;j++){
+                    parentlist.push({
+                        value:fRegion[j]["regionid"],
+                        label:fRegion[j]["regionname"]
+                    });
+                }
+
+                _self.parentRegions = parentlist;
+
+
+
                 if (ret.region != null) {
                     _self.regionDiaForm.regionid = ret.region.regionid;
                     _self.regionDiaForm.regionname = ret.region.regionname;
@@ -373,15 +386,7 @@
                 }
 
 
-                var fRegion = ret.fRegion;
-                for (var j=0;j<fRegion.length;j++){
-                    parentlist.push({
-                        value:fRegion[j]["regionid"],
-                        label:fRegion[j]["regionname"]
-                    });
-                }
 
-                _self.parentRegions = parentlist;
             }
         })
     }
