diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/dao/DoordtlDao.java b/src/main/java/com/supwisdom/dlpay/mainservice/dao/DoordtlDao.java
index 35e75d8..6e113ae 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/dao/DoordtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/dao/DoordtlDao.java
@@ -6,15 +6,18 @@
 import java.util.List;
 
 public interface DoordtlDao {
-    public List<TDoordtlInfo> findExportExcelDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno,
-                                                     String custname, String buildingname, String regionname, String doorName, String factoryId, String streamstatus);
+    public List<TDoordtlInfo> findSystemExportExcelDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno,
+                                                     String custname, String buildingid, String regionid, String doorName, String factoryId, String streamstatus);
+
+    public List<TDoordtlInfo> findOperatorExportExcelDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno,
+                                                     String custname, String buildingid, String regionid, String doorName, String factoryId, String streamstatus,String operRegionid);
 
     public Pagination findSystemTDoordtl(
             String startTranDate, String endTranDate,String startTranTime, String endTranTime,String stuempno,
-            String custname,String buildingname,String doorName,String factoryId,String streamstatus,int pageNo,int pageSize,String regionname);
+            String custname,String buildingid,String doorName,String factoryId,String streamstatus,int pageNo,int pageSize,String regionid);
 
 
-    public Pagination findAllTDoordtl(
+    public Pagination findOperatorTDoordtl(
             String operid,String startTranDate, String endTranDate,String startTranTime, String endTranTime,String stuempno,
-            String custname,String buildingname,String doorName,String factoryId,String streamstatus,int pageNo,int pageSize,String regionname);
+            String custname,String buildingid,String doorName,String factoryId,String streamstatus,int pageNo,int pageSize,String regionid,String operRegionid);
 }
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 3323dc6..aead8f2 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
@@ -18,7 +18,7 @@
 
     @Transactional
     @Override
-    public List<TDoordtlInfo> findExportExcelDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno, String custname, String buildingname, String regionname, String doorName, String factoryId, String streamstatus) {
+    public List<TDoordtlInfo> findSystemExportExcelDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno, String custname, String buildingid, String regionid, String doorName, String factoryId, String streamstatus) {
         try {
             String queryString = "select a.dtldesc , c.factoryname,d.doorname,b.stuempno,b.custname,tb.buildingname,tr.regionname," +
                     " to_char(to_date(a.transdate||a.transtime ,'yyyymmddhh24miss'),'yyyy-mm-dd hh24:mi:ss') as transdate, "
@@ -40,15 +40,15 @@
             if (!custname.equals("")) {
                 queryString += " and b.custname like :custname ";
             }
-            if (!buildingname.equals("")) {
-                queryString += " and tb.buildingname like :buildingname ";
+            if (!buildingid.equals("")) {
+                queryString += " and tb.buildingid = :buildingid ";
             }
-            if (!regionname.equals("")){
+            if (!regionid.equals("")){
                 queryString += "and tr.regionid in  "
                         +"("
                         + "with recursive tmp as  "
                         + "("
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionname like :regionname  "
+                        + "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  )";
@@ -77,11 +77,11 @@
             if (!custname.equals("")) {
                 query.setParameter("custname", "%" + custname + "%");
             }
-            if (!buildingname.equals("")) {
-                query.setParameter("buildingname", "%" + buildingname + "%");
+            if (!buildingid.equals("")) {
+                query.setParameter("buildingid", buildingid);
             }
-            if (!regionname.equals("")){
-                query.setParameter("regionname", "%" + regionname + "%");
+            if (!regionid.equals("")){
+                query.setParameter("regionid", regionid);
             }
             if (!doorName.equals("")) {
                 query.setParameter("doorName", "%" + doorName + "%");
@@ -92,7 +92,7 @@
             if (!streamstatus.equals("all")) {
                 query.setParameter("streamstatus", streamstatus);
             }
-            List list = query.getResultList();
+            List<TDoordtlInfo> list = query.getResultList();
             return list;
         }catch (Exception e){
             e.printStackTrace();
@@ -102,7 +102,101 @@
 
     @Transactional
     @Override
-    public Pagination findSystemTDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno, String custname, String buildingname, String doorName, String factoryId, String streamstatus, int pageNo, int pageSize, String regionname) {
+    public List<TDoordtlInfo> findOperatorExportExcelDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno, String custname, String buildingid, String regionid, String doorName, String factoryId, String streamstatus, String operRegionid) {
+        try {
+            String queryString = "select a.dtldesc , c.factoryname,d.doorname,b.stuempno,b.custname,tb.buildingname,tr.regionname," +
+                    " to_char(to_date(a.transdate||a.transtime ,'yyyymmddhh24miss'),'yyyy-mm-dd hh24:mi:ss') as transdate, "
+                    + "case when a.status='0' then '失败' else '成功' end status,to_char(to_date(  a.coldate||a.coltime,'yyyymmddhh24miss'),'yyyy-mm-dd hh24:mi:ss') as coldate  " + "from  "
+                    + "t_doordtl a "
+                    + "left join t_customer b on a.custid=b.custid " + "left join "
+                    + "t_building tb on b.buildingid=tb.buildingid " + "left join  "
+                    + "tb_region tr on a.regionid = tr.regionid "+ "left join  "
+                    + "t_doordev d  on a.doorid = d.doorid, " + "t_keys c " + "where a.factoryid=c.factoryid  ";
+            if (!startTranDate.equals("")) {
+                queryString += "  and a.transdate>=:startTranDate and a.transdate<=:endTranDate ";
+            }
+            if (!startTranTime.equals("")) {
+                queryString += "  and a.transtime>=:startTranTime and a.transtime<=:endTranTime ";
+            }
+            if (!stuempno.equals("")) {
+                queryString += " and b.stuempno like :stuempno ";
+            }
+            if (!custname.equals("")) {
+                queryString += " and b.custname like :custname ";
+            }
+            if (!buildingid.equals("")) {
+                queryString += " and tb.buildingid = :buildingid ";
+            }
+            if (!regionid.equals("")){
+                queryString += "and tr.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 tr.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  )";
+            }
+            if (!doorName.equals("")) {
+                queryString += " and d.doorName like :doorName ";
+            }
+            if (!factoryId.equals("all")) {
+                queryString += " and c.factoryId =:factoryId ";
+            }
+            if (!streamstatus.equals("all")) {
+                queryString += " and a.status =:streamstatus ";
+            }
+            Query query = entityManager.createNativeQuery(queryString, TDoordtlInfo.class);
+            if (!startTranDate.equals("")) {
+                query.setParameter("startTranDate", startTranDate);
+                query.setParameter("endTranDate", endTranDate);
+            }
+            if (!startTranTime.equals("")) {
+                query.setParameter("startTranTime", startTranTime);
+                query.setParameter("endTranTime", endTranTime);
+            }
+            if (!stuempno.equals("")) {
+                query.setParameter("stuempno", "%" + stuempno + "%");
+            }
+            if (!custname.equals("")) {
+                query.setParameter("custname", "%" + custname + "%");
+            }
+            if (!buildingid.equals("")) {
+                query.setParameter("buildingid", buildingid);
+            }
+            query.setParameter("operRegionid", operRegionid);
+            if (!regionid.equals("")){
+                query.setParameter("regionid", regionid);
+            }
+            if (!doorName.equals("")) {
+                query.setParameter("doorName", "%" + doorName + "%");
+            }
+            if (!factoryId.equals("all")) {
+                query.setParameter("factoryId", factoryId);
+            }
+            if (!streamstatus.equals("all")) {
+                query.setParameter("streamstatus", streamstatus);
+            }
+            List<TDoordtlInfo> list = query.getResultList();
+            return list;
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    @Transactional
+    @Override
+    public Pagination findSystemTDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno, String custname, String buildingid, String doorName, String factoryId, String streamstatus, int pageNo, int pageSize, String regionid) {
         String queryString = "select a.doorid, d.doorname,a.stuempno,a.custname,a.transdate||a.transtime transdate,tb.buildingname,tr.regionname, "
                 + "case when a.status='0' then '失败' else '成功' end status,a.coldate||a.coltime coldate,a.dtldesc,a.cardphyid  "
                 + "from t_doordtl a left join t_doordev d  on a.doorid = d.doorid "
@@ -124,15 +218,15 @@
         if (!streamstatus.equals("all")) {
             queryString += " and a.status =:streamstatus ";
         }
-        if(!buildingname.equals("")){
-            queryString += " and tb.buildingname like :buildingname";
+        if(!buildingid.equals("")){
+            queryString += " and tb.buildingid = :buildingid";
         }
-        if (!regionname.equals("")){
+        if (!regionid.equals("")){
             queryString += "and tr.regionid in  "
                     +"("
                     + "with recursive tmp as  "
                     + "("
-                    + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionname like :regionname  "
+                    + "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  )";
@@ -155,11 +249,11 @@
         if (!streamstatus.equals("all")) {
             query.setParameter("streamstatus", streamstatus);
         }
-        if(!buildingname.equals("")){
-            query.setParameter("buildingname","%"+buildingname+"%");
+        if(!buildingid.equals("")){
+            query.setParameter("buildingid",buildingid);
         }
-        if (!regionname.equals("")){
-            query.setParameter("regionname", "%"+regionname+"%");
+        if (!regionid.equals("")){
+            query.setParameter("regionid", regionid);
         }
         pageNo = pageNo <= 0 ? 1 : pageNo;
         query.setFirstResult((pageNo - 1) * pageSize);
@@ -170,7 +264,7 @@
         List<TDoordtlInfo> list = query.getResultList();
         page.setList(list);
         int totalCount = getSystemCount(startTranDate, endTranDate, startTranTime, endTranTime, stuempno, custname,
-                buildingname, doorName, factoryId, streamstatus,regionname);
+                buildingid, doorName, factoryId, streamstatus,regionid);
         page.setTotalCount(totalCount);
         return page;
     }
@@ -179,8 +273,8 @@
 
 
     private int getSystemCount(String startTranDate, String endTranDate, String startTranTime, String endTranTime,
-                         String stuempno, String custname, String buildingname, String doorName,
-                         String factoryId, String streamstatus,String regionname) {
+                         String stuempno, String custname, String buildingid, String doorName,
+                         String factoryId, String streamstatus,String regionid) {
         try {
             String queryString = "select count(*) as cnt "
                     + " from t_doordtl a "
@@ -204,15 +298,15 @@
             if (!streamstatus.equals("all")) {
                 queryString += " and a.status =:streamstatus ";
             }
-            if(!buildingname.equals("")){
-                queryString += " and tb.buildingname like :buildingname";
+            if(!buildingid.equals("")){
+                queryString += " and tb.buildingid = :buildingid";
             }
-            if (!regionname.equals("")){
+            if (!regionid.equals("")){
                 queryString += "and tr.regionid in  "
                         +"("
                         + "with recursive tmp as  "
                         + "("
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionname like :regionname  "
+                        + "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  )";
@@ -229,8 +323,8 @@
             if (!custname.equals("")) {
                 query.setParameter("custname", "%" + custname + "%");
             }
-			if (!buildingname.equals("")) {
-                query.setParameter("buildingname", "%" + buildingname + "%");
+			if (!buildingid.equals("")) {
+                query.setParameter("buildingid", buildingid);
 			}
             if (!doorName.equals("")) {
                 query.setParameter("doorName", "%" + doorName + "%");
@@ -238,8 +332,8 @@
             if (!streamstatus.equals("all")) {
                 query.setParameter("streamstatus", streamstatus);
             }
-            if(!regionname.equals("")){
-                query.setParameter("regionname","%"+regionname+"%");
+            if(!regionid.equals("")){
+                query.setParameter("regionid",regionid);
             }
             List list = query.getResultList();
             int cnt = 0;
@@ -256,7 +350,7 @@
 
     @Transactional
     @Override
-    public Pagination findAllTDoordtl(String operid, String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno, String custname, String buildingname, String doorName, String factoryId, String streamstatus, int pageNo, int pageSize, String regionname) {
+    public Pagination findOperatorTDoordtl(String operid, String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno, String custname, String buildingid, String doorName, String factoryId, String streamstatus, int pageNo, int pageSize, String regionid,String operRegionid) {
         try{
             String queryString = "select a.doorid,d.doorname,a.stuempno,a.custname,a.transdate||a.transtime transdate,"
                     + " case when a.status='0' then '失败' else '成功' end status,a.coldate||a.coltime coldate,a.dtldesc,a.cardphyid,tb.buildingname,tr.regionname "
@@ -264,7 +358,7 @@
                     + " left join t_operdevice od on a.doorid = od.deviceid"
                     + "left join t_building tb on a.buildingid=tb.buildingid "
                     + "left join tb_region tr on a.regionid=tr.regionid "
-                    + " where 1>0 and od.operid = :operid";
+                    + " where 1>0 ";
             if (!startTranDate.equals("")) {
                 queryString += " and transdate between :startTranDate and :endTranDate ";
             }
@@ -280,22 +374,30 @@
             if (!streamstatus.equals("all")) {
                 queryString += " and a.status =:streamstatus ";
             }
-            if(!buildingname.equals("")){
-                queryString += " and tb.buildingname like :buildingname";
+            if(!buildingid.equals("")){
+                queryString += " and tb.buildingid = :buildingid";
             }
-            if (!regionname.equals("")){
+            if (!regionid.equals("")){
                 queryString += "and tr.regionid in  "
                         +"("
                         + "with recursive tmp as  "
                         + "("
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionname like :regionname  "
+                        + "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 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 = :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 )";
             }
             queryString += " order by transdate DESC";
             Query query = entityManager.createNativeQuery(queryString, TDoordtlInfo.class);
-            query.setParameter("operid",operid);
 
             if (!startTranDate.equals("")) {
                 query.setParameter("startTranDate", startTranDate);
@@ -313,11 +415,12 @@
             if (!streamstatus.equals("all")) {
                 query.setParameter("streamstatus", streamstatus);
             }
-            if (!buildingname.equals("")) {
-                query.setParameter("buildingname", "%" + buildingname + "%");
+            if (!buildingid.equals("")) {
+                query.setParameter("buildingid", buildingid);
             }
-            if(regionname.equals("")){
-                query.setParameter("regionname","%"+regionname+"%");
+            query.setParameter("operRegionid", operRegionid);
+            if(regionid.equals("")){
+                query.setParameter("regionid",regionid);
             }
             pageNo = pageNo <= 0 ? 1 : pageNo;
             query.setFirstResult((pageNo - 1) * pageSize);
@@ -327,8 +430,8 @@
             page.setPageSize(pageSize);
             List<TDoordtlInfo> list = query.getResultList();
             page.setList(list);
-            int totalCount = getAllCount(operid,startTranDate, endTranDate, startTranTime, endTranTime, stuempno, custname,
-                    buildingname, doorName, factoryId, streamstatus,regionname);
+            int totalCount = getOperatorCount(startTranDate, endTranDate, startTranTime, endTranTime, stuempno, custname,
+                    buildingid, doorName, factoryId, streamstatus,regionid,operRegionid);
             page.setTotalCount(totalCount);
             return page;
         }catch (Exception e){
@@ -337,9 +440,9 @@
         return null;
     }
 
-    private int getAllCount(String operid,String startTranDate, String endTranDate, String startTranTime, String endTranTime,
-                         String stuempno, String custname, String buildingname, String doorName,
-                         String factoryId, String streamstatus,String regionname) {
+    private int getOperatorCount(String startTranDate, String endTranDate, String startTranTime, String endTranTime,
+                         String stuempno, String custname, String buildingid, String doorName,
+                         String factoryId, String streamstatus,String regionid,String operRegionid) {
         try {
             String queryString = "select count(*) as cnt "
                     + " from t_doordtl a "
@@ -347,7 +450,7 @@
                     + " left join t_operdevice od on a.doorid = od.deviceid"
                     + " left join t_building tb on a.buildingid=tb.buildingid "
                     + " left join tb_region tr on a.regionid=tr.regionid "
-                    + " where 1>0 and od.operid = :operid";
+                    + " where 1>0 ";
 
             if (!startTranDate.equals("")) {
                 queryString += " and transdate between :startTranDate and :endTranDate ";
@@ -364,22 +467,30 @@
             if (!streamstatus.equals("all")) {
                 queryString += " and a.status =:streamstatus ";
             }
-            if(!buildingname.equals("")){
+            if(!buildingid.equals("")){
                 queryString += " and tb.buildingname like :buildingname";
             }
-            if (!regionname.equals("")){
+            if (!regionid.equals("")){
                 queryString += "and tr.regionid in  "
                         +"("
                         + "with recursive tmp as  "
                         + "("
-                        + "select tbr.regionid,tbr.parentid,tbr.regionname from tb_region tbr where regionname like :regionname  "
+                        + "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  )";
+                        + ") 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  "
+                        + "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);
-            query.setParameter("operid",operid);
             if (!startTranDate.equals("")) {
                 query.setParameter("startTranDate", startTranDate);
                 query.setParameter("endTranDate", endTranDate);
@@ -396,11 +507,12 @@
             if (!streamstatus.equals("all")) {
                 query.setParameter("streamstatus", streamstatus);
             }
-            if (!buildingname.equals("")) {
-                query.setParameter("buildingname", "%" + buildingname + "%");
+            if (!buildingid.equals("")) {
+                query.setParameter("buildingid", buildingid);
             }
-            if(!regionname.equals("")){
-                query.setParameter("regionname","%"+regionname+"%");
+            query.setParameter("operRegionid", operRegionid);
+            if(!regionid.equals("")){
+                query.setParameter("regionid",regionid);
             }
             List list = query.getResultList();
             int cnt = 0;
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/service/WebInterfaceService.java b/src/main/java/com/supwisdom/dlpay/mainservice/service/WebInterfaceService.java
index ad4deba..896ad43 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/service/WebInterfaceService.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/service/WebInterfaceService.java
@@ -30,16 +30,20 @@
     //根据名单编号将已同步的名单修改为未同步使其重新同步
     public void updateDoorcardlstToNoWithIds (List<Long> listIds);
 
-    //根据查询条件获取导出Excel数据
-    public List<TDoordtlInfo> findExportExcelDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno,
-                                                     String custname, String buildingname, String regionname, String doorName, String factoryId, String streamstatus);
+    //根据查询条件获取所有导出Excel数据
+    public List<TDoordtlInfo> findSystemExportExcelDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno,
+                                                     String custname, String buildingid, String regionid, String doorName, String factoryId, String streamstatus);
+
+    //根据查询条件获取管理员权限的Excel数据
+    public List<TDoordtlInfo> findOperatorExportExcelDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno,
+                                                             String custname, String buildingid, String regionid, String doorName, String factoryId, String streamstatus,String operRegionid);
 
     //根据查询条件获取系统管理员流水数据
     public Pagination findSystemTDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno,
-                                         String custname, String buildingname, String doorName, String factoryId, String streamstatus, int pageNo, int pageSize,String regionname);
+                                         String custname, String buildingid, String doorName, String factoryId, String streamstatus, int pageNo, int pageSize,String regionid);
 
-    //根据管理员id和查询条件获取相应流水数据
-    public Pagination findAllTDoordtl(
+    //根据查询条件获取管理员权限相应流水数据
+    public Pagination findOperatorTDoordtl(
             String operid,String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno,
-            String custname, String buildingname, String doorName, String factoryId, String streamstatus, int pageNo, int pageSize,String regionname);
+            String custname, String buildingid, String doorName, String factoryId, String streamstatus, int pageNo, int pageSize,String regionid,String operRegionid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/service/impl/WebInterfaceServiceImpl.java b/src/main/java/com/supwisdom/dlpay/mainservice/service/impl/WebInterfaceServiceImpl.java
index 1636a09..8d8a543 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/service/impl/WebInterfaceServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/service/impl/WebInterfaceServiceImpl.java
@@ -53,17 +53,22 @@
     }
 
     @Override
-    public List<TDoordtlInfo> findExportExcelDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno, String custname, String buildingname, String regionname, String doorName, String factoryId, String streamstatus) {
-        return doordtlDao.findExportExcelDoordtl(startTranDate, endTranDate, startTranTime, endTranTime, stuempno, custname, buildingname, regionname, doorName, factoryId, streamstatus);
+    public List<TDoordtlInfo> findSystemExportExcelDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno, String custname, String buildingid, String regionid, String doorName, String factoryId, String streamstatus) {
+        return doordtlDao.findSystemExportExcelDoordtl(startTranDate, endTranDate, startTranTime, endTranTime, stuempno, custname, buildingid, regionid, doorName, factoryId, streamstatus);
     }
 
     @Override
-    public Pagination findSystemTDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno, String custname, String buildingname, String doorName, String factoryId, String streamstatus, int pageNo, int pageSize, String regionname) {
-        return doordtlDao.findSystemTDoordtl(startTranDate, endTranDate, startTranTime, endTranTime, stuempno, custname, buildingname, doorName, factoryId, streamstatus, pageNo, pageSize, regionname);
+    public List<TDoordtlInfo> findOperatorExportExcelDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno, String custname, String buildingid, String regionid, String doorName, String factoryId, String streamstatus, String operRegionid) {
+        return doordtlDao.findOperatorExportExcelDoordtl(startTranDate, endTranDate, startTranTime, endTranTime, stuempno, custname, buildingid, regionid, doorName, factoryId, streamstatus, operRegionid);
     }
 
     @Override
-    public Pagination findAllTDoordtl(String operid, String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno, String custname, String buildingname, String doorName, String factoryId, String streamstatus, int pageNo, int pageSize, String regionname) {
-        return null;
+    public Pagination findSystemTDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno, String custname, String buildingid, String doorName, String factoryId, String streamstatus, int pageNo, int pageSize, String regionid) {
+        return doordtlDao.findSystemTDoordtl(startTranDate, endTranDate, startTranTime, endTranTime, stuempno, custname, buildingid, doorName, factoryId, streamstatus, pageNo, pageSize, regionid);
+    }
+
+    @Override
+    public Pagination findOperatorTDoordtl(String operid, String startTranDate, String endTranDate, String startTranTime, String endTranTime, String stuempno, String custname, String buildingid, String doorName, String factoryId, String streamstatus, int pageNo, int pageSize, String regionid,String operRegionid) {
+        return doordtlDao.findOperatorTDoordtl(operid, startTranDate, endTranDate, startTranTime, endTranTime, stuempno, custname, buildingid, doorName, factoryId, streamstatus, pageNo, pageSize, regionid,operRegionid);
     }
 }
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 1053c3c..ae45449 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/controller/NcMgrController.java
@@ -100,8 +100,7 @@
             }else if (!StringUtil.isEmpty(operUser.getRegionid())){
                 page = ncService.getOperatorNcDeviceWithPage(devname, pageNo, pageSize, buildingid, operUser.getRegionid(), devtype);
                 map.put("PageResult", page);
-                TRegion regionById = systemService.getRegionById(operUser.getRegionid());
-                regions.add(regionById);
+                regions = systemService.getRegionListById(operUser.getRegionid());
                 map.put("regions", regions);
                 buildings = systemService.getBuildingByRegionId(operUser.getRegionid());
                 map.put("buildings", buildings);
@@ -147,8 +146,7 @@
                 devices = ncService.getSystemDevByType("C");//根据设备类型获取设备
                 map.put("devices", devices);
             }else if (!StringUtil.isEmpty(operUser.getRegionid())){
-                TRegion regionById = systemService.getRegionById(operUser.getRegionid());
-                regionsfill.add(regionById);
+                regionsfill = systemService.getRegionListById(operUser.getRegionid());
                 map.put("regionsfill", regionsfill);
                 buildingsfill = systemService.getBuildingByRegionId(operUser.getRegionid());
                 map.put("buildingsfill", buildingsfill);
@@ -1086,12 +1084,19 @@
     @RequestMapping(value = "/loadforadddevweek")
     public Map loadforadddevweek(
             HttpServletRequest request,
-            HttpServletResponse response) {
+            HttpServletResponse response,
+            @AuthenticationPrincipal TOperator operUser) {
         Map map = new HashMap();
         try {
             List<TNcWeektime> weektime = ncService.findAllNcWeekTime();
             map.put("weektime", weektime);//时间周
-            List<TNcDevice> device = ncService.findAllNcDevices();
+            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 df2a07b..7828c2c 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/dao/NcDeviceDao.java
@@ -41,4 +41,6 @@
     public List<TNcDevice> findAllNcDevices();
 
     public TNcDevice getDevByBuildingid(String buildingid);
+
+    public List<TNcDevice> findOperatorDevices(String operRegionid);
 }
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 f0ff557..e2b7f1c 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
@@ -349,4 +349,20 @@
         }
         return null;
     }
+
+    @Transactional
+    @Override
+    public List<TNcDevice> findOperatorDevices(String operRegionid) {
+        String sql = "select bean.deviceid,bean.devphyid,bean.devname,bean.ip,bean.operflag,bean.syncflag,bean.synctime," +
+                "bean.updtime,bean.fdevid,bean.devtype,bean.devno,bean.usetype,bean.buildingid,bean.buildingname,bean.regionid " +
+                " from T_NC_DEVICE bean where  operflag='A' "+
+                "and bean.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  )";
+        Query query = entityManager.createNativeQuery(sql, TNcDevice.class);
+        query.setParameter("operRegionid", operRegionid);
+        List<TNcDevice> list = query.getResultList();
+        return list;
+    }
 }
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 de45972..3ff8f95 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
@@ -181,4 +181,7 @@
 
     //获取所有设备
     public List<TNcDevice> findAllNcDevices();
+
+    //获取管理员权限下的设备
+    public List<TNcDevice> findOperatorDevices(String operRegionid);
 }
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 c76c9e7..29aa751 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
@@ -326,4 +326,9 @@
     public List<TNcDevice> findAllNcDevices() {
         return ncDeviceDao.findAllNcDevices();
     }
+
+    @Override
+    public List<TNcDevice> findOperatorDevices(String operRegionid) {
+        return ncDeviceDao.findOperatorDevices(operRegionid);
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/query/controller/QueryController.java b/src/main/java/com/supwisdom/dlpay/query/controller/QueryController.java
index 1895d87..924ea2e 100644
--- a/src/main/java/com/supwisdom/dlpay/query/controller/QueryController.java
+++ b/src/main/java/com/supwisdom/dlpay/query/controller/QueryController.java
@@ -5,11 +5,14 @@
 import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
 import cn.afterturn.easypoi.view.PoiBaseView;
 import com.supwisdom.dlpay.framework.domain.TOperator;
+import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.mainservice.bean.TDoordtlInfo;
 import com.supwisdom.dlpay.mainservice.domain.TKey;
 import com.supwisdom.dlpay.mainservice.service.WebInterfaceService;
+import com.supwisdom.dlpay.ncmgr.domain.TBuilding;
 import com.supwisdom.dlpay.ncmgr.service.NcService;
 import com.supwisdom.dlpay.system.domain.TDictionaryId;
+import com.supwisdom.dlpay.system.domain.TRegion;
 import com.supwisdom.dlpay.system.page.Pagination;
 import com.supwisdom.dlpay.system.service.SystemService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -53,14 +56,34 @@
      */
     @ResponseBody
     @RequestMapping(value = "/getSearchFactoryIdList")
-    public Map getSearchFactoryIdList() throws Exception {
+    public Map getSearchFactoryIdList(@AuthenticationPrincipal TOperator operUser) throws Exception {
         Map map = new HashMap<>();
-        //所有厂商
-        List<TKey> allFactoryId = webInterfaceService.getAllKeys();
-        map.put("allFactoryId", allFactoryId);
-        //流水状态
-        List<TDictionaryId> dtlStatus = systemService.findTDictionaryByType(20);
-        map.put("dtlStatus",dtlStatus);
+        try {
+            //所有厂商
+            List<TKey> allFactoryId = webInterfaceService.getAllKeys();
+            map.put("allFactoryId", allFactoryId);
+            //流水状态
+            List<TDictionaryId> dtlStatus = systemService.findTDictionaryByType(20);
+            map.put("dtlStatus", dtlStatus);
+
+            String opertype = operUser.getOpertype();
+            List<TRegion> regions = null;
+            List<TBuilding> buildings = null;
+            if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))) {
+                regions = systemService.getAllRegions();
+                buildings = ncService.getAllBuilding();
+                map.put("regions", regions);
+                map.put("buildings", buildings);
+            }else if (!StringUtil.isEmpty(operUser.getRegionid())){
+                regions = systemService.getRegionListById(operUser.getRegionid());
+                map.put("regions", regions);
+                buildings = systemService.getBuildingByRegionId(operUser.getRegionid());
+                map.put("buildings", buildings);
+            }
+
+        }catch (Exception e){
+            e.printStackTrace();
+        }
         return map;
     }
 
@@ -75,8 +98,8 @@
      * @param endTranTime
      * @param stuempno
      * @param custname
-     * @param buildingname
-     * @param regionname
+     * @param buildingid
+     * @param regionid
      * @param doorName
      * @param factoryId
      * @param streamstatus
@@ -90,11 +113,12 @@
                             @RequestParam(value = "endTranTime", required = false, defaultValue = "235959") String endTranTime,
                             @RequestParam(value = "stuempno", required = false, defaultValue = "") String stuempno,
                             @RequestParam(value = "custname", required = false, defaultValue = "") String custname,
-                            @RequestParam(value = "buildingname", required = false, defaultValue = "") String buildingname,
-                            @RequestParam(value = "regionname",required = false,defaultValue = "") String regionname,
+                            @RequestParam(value = "buildingid", required = false, defaultValue = "") String buildingid,
+                            @RequestParam(value = "regionid",required = false,defaultValue = "") String regionid,
                             @RequestParam(value = "doorName", required = false, defaultValue = "") String doorName,
                             @RequestParam(value = "factoryId", required = false, defaultValue = "all") String factoryId,
-                            @RequestParam(value = "streamstatus", required = false, defaultValue = "all") String streamstatus) {
+                            @RequestParam(value = "streamstatus", required = false, defaultValue = "all") String streamstatus,
+                            @AuthenticationPrincipal TOperator operUser) {
         Map map = new HashMap();
         try {
             if (startTranDate.equals("Invalid date")) {
@@ -103,13 +127,20 @@
                 startTranTime = "";
                 endTranTime = "";
             }
+            String opertype = operUser.getOpertype();
             /**
              * 1. 查询数据
              */
             // final int max_field = 9;
             // 保存表字段
-            List<TDoordtlInfo> tDoordtlInfos = webInterfaceService.findExportExcelDoordtl(startTranDate, endTranDate, startTranTime,
-                    endTranTime, stuempno, custname, buildingname,regionname, doorName, factoryId, streamstatus);
+            List<TDoordtlInfo> tDoordtlInfos = null;
+            if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))) {
+                tDoordtlInfos = webInterfaceService.findSystemExportExcelDoordtl(startTranDate, endTranDate, startTranTime,
+                        endTranTime, stuempno, custname, buildingid, regionid, doorName, factoryId, streamstatus);
+            }else if (!StringUtil.isEmpty(operUser.getRegionid())){
+                tDoordtlInfos = webInterfaceService.findOperatorExportExcelDoordtl(startTranDate, endTranDate, startTranTime,
+                        endTranTime, stuempno, custname, buildingid, regionid, doorName, factoryId, streamstatus,operUser.getRegionid());
+            }
             /**
              * 2.设置表格属性: title:标题  sheetName:工作簿名 type:表格类型
              */
@@ -136,13 +167,13 @@
      * @param endTranTime
      * @param stuempno
      * @param custname
-     * @param buildingname
+     * @param buildingid
      * @param doorName
      * @param factoryId
      * @param streamstatus
      * @param pageNo
      * @param pageSize
-     * @param regionname
+     * @param regionid
      * @param operUser
      * @return
      * @throws UnsupportedEncodingException
@@ -156,13 +187,13 @@
                                           @RequestParam(value = "endTranTime", required = false, defaultValue = "235959") String endTranTime,
                                           @RequestParam(value = "stuempno", required = false, defaultValue = "") String stuempno,
                                           @RequestParam(value = "custname", required = false, defaultValue = "") String custname,
-                                          @RequestParam(value = "buildingname", required = false, defaultValue = "") String buildingname,
+                                          @RequestParam(value = "buildingid", required = false, defaultValue = "") String buildingid,
                                           @RequestParam(value = "doorName", required = false, defaultValue = "") String doorName,
                                           @RequestParam(value = "factoryId", required = false, defaultValue = "all") String factoryId,
                                           @RequestParam(value = "streamstatus", required = false, defaultValue = "all") String streamstatus,
                                           @RequestParam(value = "pageNo", required = false, defaultValue = "1") int pageNo,
                                           @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize,
-                                          @RequestParam(value = "regionname", required = false, defaultValue = "") String regionname,
+                                          @RequestParam(value = "regionid", required = false, defaultValue = "") String regionid,
                                           @AuthenticationPrincipal TOperator operUser)
             throws UnsupportedEncodingException {
         Map map = new HashMap();
@@ -178,13 +209,14 @@
                 startTranTime = "";
                 endTranTime = "";
             }
+            String opertype = operUser.getOpertype();
             Pagination tDoordtlInfo = new Pagination();
-            if (operUser.getOpertype().equals("S")){
+            if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))) {
                 tDoordtlInfo = webInterfaceService.findSystemTDoordtl(startTranDate, endTranDate, startTranTime,
-                        endTranTime, stuempno, custname, buildingname, doorName, factoryId, streamstatus, pageNo, pageSize,regionname);
-            }else {
-                tDoordtlInfo = webInterfaceService.findAllTDoordtl(operUser.getOperid(), startTranDate, endTranDate, startTranTime,
-                        endTranTime, stuempno, custname, buildingname, doorName, factoryId, streamstatus, pageNo, pageSize, regionname);
+                        endTranTime, stuempno, custname, buildingid, doorName, factoryId, streamstatus, pageNo, pageSize,regionid);
+            }else if (!StringUtil.isEmpty(operUser.getRegionid())){
+                tDoordtlInfo = webInterfaceService.findOperatorTDoordtl(operUser.getOperid(), startTranDate, endTranDate, startTranTime,
+                        endTranTime, stuempno, custname, buildingid, doorName, factoryId, streamstatus, pageNo, pageSize, regionid,operUser.getRegionid());
             }
             map.put("tDoordtlInfo", tDoordtlInfo);
             map.put("index", index);
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 ffff38f..a978e81 100644
--- a/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java
+++ b/src/main/java/com/supwisdom/dlpay/system/controller/SystemController.java
@@ -425,8 +425,7 @@
                 page = systemService.getSystemBuildingList(regionid, buildingname, pageNo, pageSize);
                 map.put("pageResult", page);
             }else if (!StringUtil.isEmpty(operUser.getRegionid())){
-                TRegion region = systemService.getRegionById(operUser.getRegionid());
-                regionList.add(region);
+                regionList = systemService.getRegionListById(operUser.getRegionid());
                 page = systemService.getSystemBuildingList(operUser.getRegionid(), buildingname, pageNo, pageSize);//regionid固定为管理员的权限区域id
                 map.put("pageResult", page);
 
@@ -458,8 +457,7 @@
             if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))){
                 regionList = systemService.getAllRegions();
             }else if (!StringUtil.isEmpty(operUser.getRegionid())){
-                TRegion region = systemService.getRegionById(operUser.getRegionid());
-                regionList.add(region);
+                regionList = systemService.getRegionListById(operUser.getRegionid());
             }
             map.put("regionslist", regionList);
 
diff --git a/src/main/resources/templates/ncmgr/nc_dev.html b/src/main/resources/templates/ncmgr/nc_dev.html
index b4521e3..8af8ffc 100644
--- a/src/main/resources/templates/ncmgr/nc_dev.html
+++ b/src/main/resources/templates/ncmgr/nc_dev.html
@@ -488,10 +488,15 @@
             },
             regionChange:function(value){
                 this.buildings=[];
+                this.devform.buildingid='';
                 getRegionBuilding(this,value);
+                if (this.devform.regionid==''){
+                    getRegionBuilding(this,'0');
+                }
             },
             regionfillChange:function(value){
                 this.buildingsfill=[];
+                this.devUpform.buildingid='';
                 getRegionBuildingfill(this,value);
             },
             editDev: function (deviceid) {
diff --git a/src/main/resources/templates/query/tdoorstream.html b/src/main/resources/templates/query/tdoorstream.html
index a3427e1..e241a30 100644
--- a/src/main/resources/templates/query/tdoorstream.html
+++ b/src/main/resources/templates/query/tdoorstream.html
@@ -42,8 +42,12 @@
                         <el-input v-model="tdoorstream.custname" style="width:193px"></el-input>
                     </el-col>
                     <el-col :span="8">
-                        <el-form-item label="区域">
-                            <el-select v-model="searchDoorForm.regionid" placeholder="请选择">
+                        <label class="control-label" style="margin-right:10px;font-size: 14px;width:80px">区域:
+                        </label>
+                        <el-form-item >
+                            <el-select style="width:193px" v-model="tdoorstream.regionid"
+                                       @Change="regionChange"
+                                       placeholder="请选择">
                                 <el-option
                                         v-for="regionid in regions"
                                         :key="regionid.value"
@@ -55,8 +59,10 @@
                     </el-col>
 
                     <el-col :span="8">
-                        <el-form-item label="楼栋">
-                            <el-select v-model="searchDoorForm.buildingid" placeholder="请选择">
+                        <label class="control-label" style="margin-right:10px;font-size: 14px;width:80px">楼栋:
+                        </label>
+                        <el-form-item >
+                            <el-select style="width:193px" v-model="tdoorstream.buildingid" placeholder="请选择">
                                 <el-option
                                         v-for="buildingid in buildings"
                                         :key="buildingid.value"
@@ -232,7 +238,12 @@
                 }).then(function(){
                     downloadExcel(_self,_self.starttransdate,_self.endtransdate);
                 });
-            }
+            },
+            regionChange:function(value){
+                this.buildings=[];
+                this.tdoorstream.buildingid='';
+                getRegionBuilding(this,value);
+            },
         },
         created : function() {
             this.loading=true;
@@ -260,8 +271,26 @@
                             label : dtlStatus[i].dictcaption
                         });
                     }
-                    _self.dtlstatus = dtllist;
+                    var regionlist = [];
+                    var region = ret.regions;
+                    for (var i = 0; i < region.length; i++) {
+                        regionlist.push({
+                            value: region[i]["regionid"],
+                            label: region[i]["regionname"]
+                        })
+                    }
 
+                    var buildinglist = [];
+                    var building = ret.buildings;
+                    for (var i = 0; i < building.length; i++) {
+                        buildinglist.push({
+                            value: building[i]["buildingid"],
+                            label: building[i]["buildingname"]
+                        })
+                    }
+                    _self.dtlstatus = dtllist;
+                    _self.regions = regionlist;
+                    _self.buildings = buildinglist;
                     _self.loading=false;
                 }
             })
@@ -359,4 +388,26 @@
         var formated=hour + minute + sec;
         return formated;
     }
+
+    function getRegionBuilding(_self,value){
+        $.ajax({
+            type: "get",
+            dataType: "json",
+            url: encodeURI("/ncmgr/getRegionBuilding?regionid=" + value),
+            success: function (ret) {
+                var bList = [];
+                var rB = ret.reBuilding;
+                if (rB!=null) {
+                    for (var j = 0; j < rB.length; j++) {
+                        bList.push({
+                            value: rB[j]["buildingid"],
+                            label: rB[j]["buildingname"]
+                        });
+                    }
+                }
+
+                _self.buildings = bList;
+            }
+        })
+    }
 </script>
\ No newline at end of file
