From dba54bf8c8f9299d61c05bf3a941708ea399c998 Mon Sep 17 00:00:00 2001
From: ZhuDongming <773644075@qq.com>
Date: Sun, 26 Apr 2020 15:20:22 +0800
Subject: [PATCH] update excel多个工作表导出

---
 src/main/java/com/moral/service/HistoryMinutelyService.java          |    5 
 src/main/java/com/moral/service/OrganizationService.java             |   18 
 src/main/java/com/moral/service/impl/SensorUnitServiceImpl.java      |  141 +++---
 src/main/java/com/moral/controller/ReportController.java             |   99 ++++-
 src/main/java/com/moral/controller/SensorController.java             |   47 +
 src/main/java/com/moral/service/SensorService.java                   |    4 
 src/main/java/com/moral/mapper/SensorMapper.java                     |   27 
 pom.xml                                                              |   13 
 src/main/java/com/moral/controller/TokenController.java              |   36 +
 src/main/java/com/moral/mapper/HistoryMinutelyMapper.java            |   10 
 src/main/java/com/moral/service/impl/SensorServiceImpl.java          |   50 ++
 src/main/java/com/moral/controller/OrganizationController.java       |   45 +
 src/main/resources/mapper/HistoryMinutelyMapper.xml                  |   29 +
 src/main/java/com/moral/service/impl/HistoryServiceImpl.java         |    2 
 src/main/resources/mapper/SensorMapper.xml                           |   24 +
 src/main/java/com/moral/service/impl/OrganizationServiceImpl.java    |  298 ++++++++-------
 src/main/java/com/moral/controller/ScreenController.java             |   12 
 src/main/java/com/moral/mapper/OrganizationMapper.java               |   23 
 src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java |   61 ++
 src/main/resources/mapper/OrganizationMapper.xml                     |  175 ++++----
 20 files changed, 687 insertions(+), 432 deletions(-)

diff --git a/pom.xml b/pom.xml
index 83f8e88..fb81680 100644
--- a/pom.xml
+++ b/pom.xml
@@ -203,6 +203,19 @@
 		    <artifactId>aviator</artifactId>
 		    <version>4.2.0</version>
 		</dependency>
+
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.3.1</version>
+        </dependency>
+
+        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>4.1.2</version>
+        </dependency>
 	</dependencies>
 
 	<build>
diff --git a/src/main/java/com/moral/controller/OrganizationController.java b/src/main/java/com/moral/controller/OrganizationController.java
index b515654..43cc845 100644
--- a/src/main/java/com/moral/controller/OrganizationController.java
+++ b/src/main/java/com/moral/controller/OrganizationController.java
@@ -1,54 +1,71 @@
 package com.moral.controller;
 
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.moral.common.bean.PageBean;
 import com.moral.common.bean.ResultBean;
 import com.moral.entity.Organization;
 import com.moral.security.auth.JwtAuthenticationToken;
 import com.moral.security.model.UserContext;
 import com.moral.service.OrganizationService;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-import javax.annotation.Resource;
 
 @RestController
 @RequestMapping("organization")
 public class OrganizationController {
     @Resource
     OrganizationService organizationService;
+
     @GetMapping("page-list")
     public PageBean pageList(PageBean pageBean) {
         return organizationService.queryByPageBean(pageBean);
     }
+
     @PostMapping("delete-by-ids")
-    public ResultBean deleteByIds(@RequestBody Integer [] ids){
+    public ResultBean deleteByIds(@RequestBody Integer[] ids) {
         organizationService.deleteByIds(ids);
         ResultBean resultBean = new ResultBean(ResultBean.SUCCESS);
         return resultBean;
     }
+
     @PostMapping("add-or-modify")
-    public ResultBean addOrModify(@RequestBody Organization organization){
+    public ResultBean addOrModify(@RequestBody Organization organization) {
         organizationService.addOrModify(organization);
         ResultBean resultBean = new ResultBean(ResultBean.SUCCESS);
         return resultBean;
     }
-    
+
     @GetMapping("list/{name}")
-	public ResultBean<List<Organization>> getOrganizationsByName(@PathVariable("name") String name) {
-		List<Organization> organizations = organizationService.getOrganizationsByName(name);
-		return new ResultBean<List<Organization>>(organizations);
-	}
+    public ResultBean<List<Organization>> getOrganizationsByName(@PathVariable("name") String name) {
+        List<Organization> organizations = organizationService.getOrganizationsByName(name);
+        return new ResultBean<List<Organization>>(organizations);
+    }
 
     @GetMapping("get-my-org")
-    public ResultBean<Organization> getMyOrganization(JwtAuthenticationToken token){
+    public ResultBean<Organization> getMyOrganization(JwtAuthenticationToken token) {
         UserContext userContext = token.getPrincipal();
         Organization organization = organizationService.getOrganizationById(userContext.getOrganizationId());
         return new ResultBean<>(organization);
     }
+
     @GetMapping("getforg")
-    public ResultBean<Organization> getFatherOrg(Integer cid){
+    public ResultBean<Organization> getFatherOrg(Integer cid) {
         Organization organization = organizationService.getFatherOrg(cid);
         return new ResultBean<>(organization);
     }
+
+    @GetMapping("organization-list")
+    public ResultBean getOrganizationList(String organizationName) {
+        ResultBean resultBean = new ResultBean(ResultBean.SUCCESS);
+        resultBean.setData(organizationService.getOrganizationList(organizationName));
+        return resultBean;
+    }
 }
diff --git a/src/main/java/com/moral/controller/ReportController.java b/src/main/java/com/moral/controller/ReportController.java
index c86ffbb..b4ef1d7 100644
--- a/src/main/java/com/moral/controller/ReportController.java
+++ b/src/main/java/com/moral/controller/ReportController.java
@@ -2,12 +2,12 @@
 
 import java.io.OutputStream;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
 import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -20,6 +20,7 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.alibaba.fastjson.JSONObject;
 import com.moral.common.bean.ResultBean;
 import com.moral.common.util.ParameterUtils;
 import com.moral.common.util.WebUtils;
@@ -32,6 +33,9 @@
 import com.moral.service.HistoryDailyService;
 import com.moral.service.HistoryMinutelyService;
 import com.moral.service.MonitorPointService;
+
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.poi.excel.ExcelWriter;
 
 import static com.moral.common.util.ExportExcelUtils.exportData;
 import static com.moral.common.util.WebUtils.getParametersStartingWith;
@@ -139,9 +143,26 @@
     public ResultBean<Boolean> getCustomMadeExcelReport(HttpServletRequest request, HttpServletResponse response) throws Exception {
         Map<String, Object> parameters = getParametersStartingWith(request, null);
         ParameterUtils.getTimeType4Time(parameters);
-        Object sensorKey = parameters.get("sensorKey");
-        String sensorInfo = parameters.get("sensorInfo").toString();
-        parameters.put("sensorKeys", Arrays.asList(sensorKey));
+        String sensorsInfo = parameters.get("sensors").toString();
+        String[] sensorsStr = sensorsInfo.split(",");
+        List<String> sensorKeys = new ArrayList<>();
+        List<String> sensorKeysNames = new ArrayList<>();
+        List<String> sensorKeysUnits = new ArrayList<>();
+        for (int index = 0; index < sensorsStr.length; index++) {
+            String[] split = sensorsStr[index].split("-");
+            String key;
+            if (index == 0) {
+                key = split[0].replace("\"", "").substring(1);
+            } else {
+                key = split[0].replace("\"", "");
+            }
+            String name = split[1].replace("\"", "");
+            String Unit = split[2].replace("\"", "");
+            sensorKeys.add(key);
+            sensorKeysNames.add(name);
+            sensorKeysUnits.add(Unit);
+        }
+        parameters.put("sensorKeys", sensorKeys);
         List<String> macList = new ArrayList<>();
         List<MonitorPoint> monitorPoints = monitorPointService.getMonitorPointsAndDevicesByRegion(parameters);
         for (MonitorPoint m : monitorPoints) {
@@ -152,27 +173,63 @@
         parameters.put("macs", macList);
         List<Map<String, Object>> list = new ArrayList<>();
         if (!CollectionUtils.isEmpty(macList)) {
-            list = historyMinutelyService.getDevicesAvgDataToExcel(parameters);
+            list = historyMinutelyService.getDevicesSensorsAvgDataToExcel(parameters);
         }
-        Map<String, Object> map = list.get(0);
-        Map<Integer, String> mapNew = new LinkedHashMap<>();
-        int i = 0;
-        for (String key : map.keySet()) {
-            if (!("monitorPointName".equals(key) || "name".equals(key))) {
-                mapNew.put(i, key);
-                i++;
+        List<List<Map<String, Object>>> sheets = new ArrayList<>();
+        for (int i = 0; i < sensorKeys.size(); i++) {
+            List<Map<String, Object>> sheet = new ArrayList<>();
+            for (int j = 0; j < list.size(); j++) {
+                Map<String, Object> data = new LinkedHashMap<>();
+                for (Map.Entry<String, Object> kv : list.get(j).entrySet()) {
+                    if ("monitorPointName".equals(kv.getKey())) {
+                        data.put("������������(������:" + sensorKeysUnits.get(i) + ")", kv.getValue());
+                    } else if ("name".equals(kv.getKey())) {
+                        data.put("������������", kv.getValue());
+                    } else {
+                        String sensorsValue = kv.getValue().toString();
+                        JSONObject jsonObject = JSONObject.parseObject(sensorsValue);
+                        if (jsonObject != null) {
+                            List<Object> sensorsValueList = (List<Object>) jsonObject.get(sensorKeys.get(i));
+                            if (sensorsValueList != null) {
+                                data.put(kv.getKey(), sensorsValueList.get(0));
+                            } else {
+                                data.put(kv.getKey(), "");
+                            }
+                        } else {
+                            data.put(kv.getKey(), "");
+                        }
+                    }
+                }
+                sheet.add(data);
             }
+            sheets.add(sheet);
         }
-        String[][] exportColumn = new String[map.size()][];
-        exportColumn[0] = new String[]{"������������-" + sensorInfo, "30", "monitorPointName"};
-        exportColumn[1] = new String[]{"������������", "20", "name"};
-        for (int index = 0; index < map.size() - 2; index++) {
-            exportColumn[index + 2] = new String[]{mapNew.get(index), "20", mapNew.get(index)};
+        if (!CollectionUtils.isEmpty(sheets)) {
+            ExcelWriter writer = new ExcelWriter(false, sensorKeysNames.get(0));
+            writer.write(sheets.get(0), true);
+            writer.autoSizeColumnAll();
+            writer.setColumnWidth(0, 25);
+            writer.setColumnWidth(1, 25);
+            if (sheets.size() >= 2) {
+                for (int i = 1; i < sheets.size(); i++) {
+                    writer.setSheet(sensorKeysNames.get(i));
+                    writer.write(sheets.get(i), true);
+                    writer.autoSizeColumnAll();
+                    writer.setColumnWidth(0, 25);
+                    writer.setColumnWidth(1, 25);
+                }
+            }
+            response.setContentType("application/vnd.ms-excel;charset=utf-8");
+            String codedFileName = java.net.URLEncoder.encode("Excel������", "UTF-8");
+            response.setHeader("Content-Disposition", "attachment;filename=" + codedFileName + ".xls");
+            ServletOutputStream out = response.getOutputStream();
+            writer.flush(out, true);
+            // ������writer���������������
+            writer.close();
+            //������������������������Servlet���
+            IoUtil.close(out);
         }
-        OutputStream outputStream = exportData(response, "Excel������", list, exportColumn);
-        outputStream.flush();
-        outputStream.close();
-        return new ResultBean<Boolean>(true);
+        return new ResultBean<>(true);
     }
 
 }
diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java
index bcf8f89..e4bb92c 100644
--- a/src/main/java/com/moral/controller/ScreenController.java
+++ b/src/main/java/com/moral/controller/ScreenController.java
@@ -18,8 +18,10 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
-import java.util.Set;
 import java.util.stream.Collectors;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.collections.MapUtils;
@@ -100,9 +102,6 @@
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
 
 import static com.moral.common.util.ResourceUtil.getValue;
 import static com.moral.common.util.WebUtils.getParametersStartingWith;
@@ -1069,7 +1068,6 @@
         Map<String, Object> map = list.get(0);
         String monitor_point_id = map.get("monitor_point_id").toString();
         List<Map<String, Object>> sensorUnitList = sensorUnitService.getSensorsByMonitPointId2(monitor_point_id);
-        System.out.println(sensorUnitList);
         for (Map<String, Object> sensorMap : list) {
             for (Map<String, Object> sensorUnitMap : sensorUnitList) {
                 if (sensorUnitMap.get("sensor_key").equals(sensorMap.get("sensor_key"))) {
@@ -1090,8 +1088,6 @@
         String monitor_point_id = (String) parameters.get("monitor_point_id");
         List<Map<String, Object>> list = sensorService.getSensorByMonitorPointId(monitor_point_id);
         List<Map<String, Object>> sensorUnitList = sensorUnitService.getSensorsByMonitPointId2(monitor_point_id);
-        System.out.println("list:" + list);
-        System.out.println("sensorUnitList:" + sensorUnitList);
         for (Map<String, Object> sensorMap : list) {
             for (Map<String, Object> sensorUnitMap : sensorUnitList) {
                 if (sensorUnitMap.get("sensor_key").equals(sensorMap.get("sensorKey"))) {
@@ -1306,9 +1302,7 @@
         sensorMap.put("e10", Double.parseDouble(map.get("co").toString()));
         sensorMap.put("e15", Double.parseDouble(map.get("o3").toString()));
         Map<String, Object> StateControl = AQICalculation.hourlyAQI(sensorMap);
-        System.out.println("StateControl:" + StateControl);
         Map<String, Object> hourAqi = historyService.gitHourlyAQIByMonitorPointIdAndTimeslot(parameters);
-        System.out.println("hourAqi:" + hourAqi);
         Map<String, Object> returnMap = new HashMap<>();
         returnMap.put("MonitorPointAQI", hourAqi.get("AQI"));
         returnMap.put("StateControlAQI", StateControl.get("AQI"));
diff --git a/src/main/java/com/moral/controller/SensorController.java b/src/main/java/com/moral/controller/SensorController.java
index 476714d..3e6a47c 100644
--- a/src/main/java/com/moral/controller/SensorController.java
+++ b/src/main/java/com/moral/controller/SensorController.java
@@ -1,13 +1,23 @@
 package com.moral.controller;
 
-import com.moral.common.bean.PageBean;
-import com.moral.common.bean.ResultBean;
-import com.moral.entity.Sensor;
-import com.moral.service.SensorService;
-import org.springframework.web.bind.annotation.*;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import javax.annotation.Resource;
-import java.util.List;
+
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.moral.common.bean.PageBean;
+import com.moral.common.bean.ResultBean;
+import com.moral.common.util.StringUtils;
+import com.moral.entity.Sensor;
+import com.moral.service.SensorService;
 
 @RestController
 @RequestMapping("sensor")
@@ -15,31 +25,46 @@
 public class SensorController {
     @Resource
     SensorService sensorService;
+
     @GetMapping("page-list")
     public PageBean pageList(PageBean pageBean) {
         return sensorService.queryByPageBean(pageBean);
     }
+
     @GetMapping("list-by-vid")
-    public PageBean pageListByVersionId(Integer versionId){
+    public PageBean pageListByVersionId(Integer versionId) {
         return sensorService.queryByVersionId(versionId);
     }
+
     @PostMapping("delete-by-ids")
-    public ResultBean deleteByIds(@RequestBody Integer [] ids){
+    public ResultBean deleteByIds(@RequestBody Integer[] ids) {
         sensorService.deleteByIds(ids);
         ResultBean resultBean = new ResultBean(ResultBean.SUCCESS);
         return resultBean;
     }
+
     @PostMapping("add-or-modify")
-    public ResultBean addOrModify(@RequestBody Sensor sensor){
+    public ResultBean addOrModify(@RequestBody Sensor sensor) {
         sensorService.addOrModify(sensor);
         ResultBean resultBean = new ResultBean(ResultBean.SUCCESS);
         return resultBean;
     }
-    
+
     @GetMapping("all")
     public ResultBean<List<Sensor>> getAllSensors() {
-    	List<Sensor> sensors = sensorService.getAllSensors();
+        List<Sensor> sensors = sensorService.getAllSensors();
         return new ResultBean<List<Sensor>>(sensors);
     }
 
+    @GetMapping("getSenosrsByOrgId")
+    public ResultBean<List<Sensor>> getSenosrsByOrgId(Integer organizationId, String regionCode) {
+        Map<String, Object> parameters = new HashMap<>();
+        parameters.put("organizationId", organizationId);
+        if (!StringUtils.isNullOrEmpty(regionCode)) {
+            parameters.put("regionCode", Long.valueOf(regionCode));
+        }
+        List<Sensor> sensors = sensorService.selectSenosrsByOrgId(parameters);
+        return new ResultBean<>(sensors);
+    }
+
 }
diff --git a/src/main/java/com/moral/controller/TokenController.java b/src/main/java/com/moral/controller/TokenController.java
index 2b5fead..85b6dec 100644
--- a/src/main/java/com/moral/controller/TokenController.java
+++ b/src/main/java/com/moral/controller/TokenController.java
@@ -1,8 +1,14 @@
 package com.moral.controller;
 
-import com.moral.entity.auth.AuthToken;
+import java.util.Arrays;
+import java.util.LinkedHashMap;
+
 import org.apache.commons.codec.binary.Base64;
-import org.springframework.http.*;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -10,8 +16,7 @@
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.client.RestTemplate;
 
-import java.util.Arrays;
-import java.util.LinkedHashMap;
+import com.moral.entity.auth.AuthToken;
 
 @Controller
 public class TokenController {
@@ -24,29 +29,28 @@
 
         RestTemplate restTemplate = new RestTemplate();
         HttpEntity<String> request = new HttpEntity<String>(getHeadersWithClientCredentials());
-        ResponseEntity<Object> response = restTemplate.exchange(AUTH_SERVER_URI+"username="+username+"&password="+password, HttpMethod.POST, request, Object.class);
-        LinkedHashMap<String, Object> map = (LinkedHashMap<String, Object>)response.getBody();
+        ResponseEntity<Object> response = restTemplate.exchange(AUTH_SERVER_URI + "username=" + username + "&password=" + password, HttpMethod.POST, request, Object.class);
+        LinkedHashMap<String, Object> map = (LinkedHashMap<String, Object>) response.getBody();
         AuthToken token = null;
-        if(map!=null){
+        if (map != null) {
             token = new AuthToken();
-            token.setAccess_token((String)map.get("access_token"));
-            token.setToken_type((String)map.get("token_type"));
-            token.setRefresh_token((String)map.get("refresh_token"));
-            token.setExpires_in((Integer)map.get("expires_in"));
-            token.setScope((String)map.get("scope"));
-            System.out.println(token);
+            token.setAccess_token((String) map.get("access_token"));
+            token.setToken_type((String) map.get("token_type"));
+            token.setRefresh_token((String) map.get("refresh_token"));
+            token.setExpires_in((Integer) map.get("expires_in"));
+            token.setScope((String) map.get("scope"));
         }
         return token;
     }
 
-    private static HttpHeaders getHeaders(){
+    private static HttpHeaders getHeaders() {
         HttpHeaders headers = new HttpHeaders();
         headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
         return headers;
     }
 
-    private static HttpHeaders getHeadersWithClientCredentials(){
-        String plainClientCredentials="my-trusted-client:secret";
+    private static HttpHeaders getHeadersWithClientCredentials() {
+        String plainClientCredentials = "my-trusted-client:secret";
         String base64ClientCredentials = new String(Base64.encodeBase64(plainClientCredentials.getBytes()));
         HttpHeaders headers = getHeaders();
         headers.add("Authorization", "Basic " + base64ClientCredentials);
diff --git a/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java b/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java
index 64fcda7..0b09df2 100644
--- a/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java
+++ b/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java
@@ -1,12 +1,12 @@
 package com.moral.mapper;
 
-import com.moral.entity.charts.DataCondition;
-import com.moral.entity.charts.TimePeriod;
+import java.util.List;
+import java.util.Map;
 
 import org.apache.ibatis.annotations.Param;
 
-import java.util.List;
-import java.util.Map;
+import com.moral.entity.charts.DataCondition;
+import com.moral.entity.charts.TimePeriod;
 
 public interface HistoryMinutelyMapper {
 
@@ -27,4 +27,6 @@
     List<Map<String, Object>> getSensorData2020(Map<String, Object> parameters);
 
     List<Map<String, Object>> getDevicesAvgDataToExcel(Map<String, Object> parameters);
+
+    List<Map<String, Object>> getDevicesSensorsAvgDataToExcel(Map<String, Object> parameters);
 }
\ No newline at end of file
diff --git a/src/main/java/com/moral/mapper/OrganizationMapper.java b/src/main/java/com/moral/mapper/OrganizationMapper.java
index 56c73bb..de48897 100644
--- a/src/main/java/com/moral/mapper/OrganizationMapper.java
+++ b/src/main/java/com/moral/mapper/OrganizationMapper.java
@@ -3,18 +3,25 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.ibatis.annotations.Param;
+
 import com.moral.common.mapper.BaseMapper;
 import com.moral.entity.Organization;
+
 import tk.mybatis.mapper.entity.Example;
 
 public interface OrganizationMapper extends BaseMapper<Organization> {
-	List<Organization> selectWithAreaNameByExample(Example example);
-	List<Organization> getOrganizationsByAreaName(Map<String, Object> parameters);
+    List<Organization> selectWithAreaNameByExample(Example example);
 
-	/**
-	 * ���������������������������������id���������id���������0
-	 * @param orgId
-	 * @return
-	 */
-	List<Integer> selectLowerOrgIds(Integer orgId);
+    List<Organization> getOrganizationsByAreaName(Map<String, Object> parameters);
+
+    /**
+     * ���������������������������������id���������id���������0
+     *
+     * @param orgId
+     * @return
+     */
+    List<Integer> selectLowerOrgIds(Integer orgId);
+
+    List<Organization> getOrganizationList(@Param("organizationName") String organizationName);
 }
\ No newline at end of file
diff --git a/src/main/java/com/moral/mapper/SensorMapper.java b/src/main/java/com/moral/mapper/SensorMapper.java
index 0a63b1e..6c8e581 100644
--- a/src/main/java/com/moral/mapper/SensorMapper.java
+++ b/src/main/java/com/moral/mapper/SensorMapper.java
@@ -1,11 +1,12 @@
 package com.moral.mapper;
 
-import com.moral.common.mapper.BaseMapper;
-import com.moral.entity.Sensor;
-import org.apache.ibatis.annotations.Param;
-
 import java.util.List;
 import java.util.Map;
+
+import org.apache.ibatis.annotations.Param;
+
+import com.moral.common.mapper.BaseMapper;
+import com.moral.entity.Sensor;
 
 public interface SensorMapper extends BaseMapper<Sensor> {
     List<Sensor> selectByVersionId(Integer deviceVersionId);
@@ -16,17 +17,19 @@
 
     List<Sensor> selectByOrgId(Integer organizationId);
 
-	List<Map<String, Object>> getSensorsByDeviceVersionId(Map<String, Object> parameters);
-	
-    List<Sensor> getSensorsByCriteria(Map<String, Object> parameters);
-    
-    Map<String,Object> getSensorBySensorKey(@Param("sensor_key")String sensor_key);
-    
-    List<Map<String,Object>> getSensorByDeviceId(@Param("id")String id);
+    List<Map<String, Object>> getSensorsByDeviceVersionId(Map<String, Object> parameters);
 
-    List<Map<String,Object>> getSensorByMonitorPointId(@Param("monitor_point_id")String monitor_point_id);
+    List<Sensor> getSensorsByCriteria(Map<String, Object> parameters);
+
+    Map<String, Object> getSensorBySensorKey(@Param("sensor_key") String sensor_key);
+
+    List<Map<String, Object>> getSensorByDeviceId(@Param("id") String id);
+
+    List<Map<String, Object>> getSensorByMonitorPointId(@Param("monitor_point_id") String monitor_point_id);
 
     List<Sensor> getSensorsByMac(Map<String, Object> parameters);
 
     List<Sensor> getSensorsInfoByMac(@Param("mac") String mac);
+
+    List<Sensor> selectSenosrsByOrgId(Map<String, Object> parameters);
 }
\ No newline at end of file
diff --git a/src/main/java/com/moral/service/HistoryMinutelyService.java b/src/main/java/com/moral/service/HistoryMinutelyService.java
index 7f461f3..ae7b1d4 100644
--- a/src/main/java/com/moral/service/HistoryMinutelyService.java
+++ b/src/main/java/com/moral/service/HistoryMinutelyService.java
@@ -10,7 +10,7 @@
 public interface HistoryMinutelyService {
 
     Map<String, Object> getDayAQIByDevice(Map<String, Object> parameters);
-    
+
     Map<String, Object> getHourAQIByDevice(Map<String, Object> parameters);
 
     Map<String, List> getCompareReport(Map<String, Object> parameters) throws Exception;
@@ -19,7 +19,6 @@
 
     Map<String, Object> getMonthAverageBySensor(Map<String, Object> parameters);
 
-
     Map<String, List<List<Double>>> queryLineChartDateByCrieria(LineChartCriteria lineChartCriteria);
 
     void convertQueryParam(Map<String, Object> parameters) throws ParseException;
@@ -27,4 +26,6 @@
     List<List<Map<String, Object>>> getSensorData(Map<String, Object> parameters) throws Exception;
 
     List<Map<String, Object>> getDevicesAvgDataToExcel(Map<String, Object> parameters) throws Exception;
+
+    List<Map<String, Object>> getDevicesSensorsAvgDataToExcel(Map<String, Object> parameters) throws Exception;
 }
diff --git a/src/main/java/com/moral/service/OrganizationService.java b/src/main/java/com/moral/service/OrganizationService.java
index fe1dcc3..11b1d39 100644
--- a/src/main/java/com/moral/service/OrganizationService.java
+++ b/src/main/java/com/moral/service/OrganizationService.java
@@ -5,22 +5,24 @@
 import java.util.Set;
 
 import com.moral.common.bean.PageBean;
-import com.moral.entity.DeviceVersion;
 import com.moral.entity.Organization;
 
 public interface OrganizationService {
-	Set<Integer> getChildOrganizationIds(Integer orgId);
+    Set<Integer> getChildOrganizationIds(Integer orgId);
 
-	List<Organization> getOrganizationsByAreaName(Map<String, Object> parameters);
+    List<Organization> getOrganizationsByAreaName(Map<String, Object> parameters);
 
-	public PageBean queryByPageBean(PageBean pageBean);
+    public PageBean queryByPageBean(PageBean pageBean);
 
-	public void addOrModify(Organization organization);
+    public void addOrModify(Organization organization);
 
-	public void deleteByIds(Integer... ids);
-	
-	List<Organization> getOrganizationsByName(String name);
+    public void deleteByIds(Integer... ids);
+
+    List<Organization> getOrganizationsByName(String name);
+
     public Organization getOrganizationById(int id);
 
     public Organization getFatherOrg(int childId);
+
+    List<Organization> getOrganizationList(String organizationName);
 }
diff --git a/src/main/java/com/moral/service/SensorService.java b/src/main/java/com/moral/service/SensorService.java
index 51222a5..b96018f 100644
--- a/src/main/java/com/moral/service/SensorService.java
+++ b/src/main/java/com/moral/service/SensorService.java
@@ -6,8 +6,6 @@
 import com.moral.common.bean.PageBean;
 import com.moral.entity.Sensor;
 
-import java.util.List;
-
 public interface SensorService {
     List<Sensor> queryAll();
 
@@ -37,4 +35,6 @@
 
     List<Map<String, String>> getSensorsMaps(String mac);
 
+    List<Sensor> selectSenosrsByOrgId(Map<String, Object> parameters);
+
 }
diff --git a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
index 0333593..0b9267e 100644
--- a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
@@ -27,6 +27,8 @@
 import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 
+import javax.annotation.Resource;
+
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.time.DateUtils;
 import org.springframework.stereotype.Service;
@@ -49,8 +51,6 @@
 import com.moral.mapper.HistoryMinutelyMapper;
 import com.moral.mapper.SensorMapper;
 import com.moral.service.HistoryMinutelyService;
-
-import javax.annotation.Resource;
 
 import static com.moral.common.bean.Constants.NULL_VALUE;
 import static org.springframework.util.ObjectUtils.isEmpty;
@@ -106,16 +106,13 @@
     public Map<String, Object> getHourAQIByDevice(Map<String, Object> parameters) {
         //ValidateUtil.notNull(parameters.get("mac"), "param.is.null");
         LocalDate localDate = LocalDate.now();
-        System.out.println("localDate:" + localDate);
         // ������00:00:00
         //parameters.put("start", localDate.minusDays(1));
 
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(new Date());
         calendar.set(Calendar.HOUR, calendar.get(Calendar.HOUR) - 1);
-        System.out.println("++++++" + calendar);
         int hour = calendar.get(Calendar.HOUR) - 1;
-        System.out.println("������������������" + hour);
 
         // ������00:00:00
         parameters.put("end", localDate);
@@ -595,7 +592,7 @@
                         }
                     }
                 }
-                if("0��".equals(mapAvg.get("e76")) || "0".equals(mapMin.get("e76")) || "0".equals(mapMax.get("e76")) || "0��".equals(mapAvg.get("e77")) || "0".equals(mapMin.get("e77")) || "0".equals(mapMax.get("e77"))){
+                if ("0��".equals(mapAvg.get("e76")) || "0".equals(mapMin.get("e76")) || "0".equals(mapMax.get("e76")) || "0��".equals(mapAvg.get("e77")) || "0".equals(mapMin.get("e77")) || "0".equals(mapMax.get("e77"))) {
                     continue;
                 }
                 listMapAvg.add(mapAvg);
@@ -614,28 +611,28 @@
         if ("month".equals(parameters.get("type"))) {
             parameters.put("timeUnits", "daily");
             parameters.put("typeFormat", "%Y-%m-%d");
-            String time = parameters.get("time")+"-01T00:00:00";
+            String time = parameters.get("time") + "-01T00:00:00";
             LocalDateTime value = LocalDateTime.parse(time);
             LocalDateTime start = value.with(TemporalAdjusters.firstDayOfMonth());
             LocalDateTime end = value.with(TemporalAdjusters.lastDayOfMonth());
             parameters.put("start", start);
             parameters.put("end", end);
-            int day=end.getDayOfMonth();
-            List<String> timeList=new ArrayList<>();
-            for(int i=0;i<=day-1;i++){
+            int day = end.getDayOfMonth();
+            List<String> timeList = new ArrayList<>();
+            for (int i = 0; i <= day - 1; i++) {
                 timeList.add(start.plusDays(i).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
             }
             parameters.put("timeList", timeList);
-        }else if("day".equals(parameters.get("type"))){
-            String time = parameters.get("time")+"T00:00:00";
+        } else if ("day".equals(parameters.get("type"))) {
+            String time = parameters.get("time") + "T00:00:00";
             LocalDateTime value = LocalDateTime.parse(time);
-            LocalDateTime end=value.plusHours(23);
+            LocalDateTime end = value.plusHours(23);
             parameters.put("timeUnits", "hourly");
             parameters.put("typeFormat", "%Y-%m-%d %H:%i");
             parameters.put("start", time);
             parameters.put("end", end);
-            List<String> timeList=new ArrayList<>();
-            for(int i=0;i<=23;i++){
+            List<String> timeList = new ArrayList<>();
+            for (int i = 0; i <= 23; i++) {
                 timeList.add(value.plusHours(i).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")));
             }
             parameters.put("timeList", timeList);
@@ -643,4 +640,38 @@
         return historyMinutelyMapper.getDevicesAvgDataToExcel(parameters);
     }
 
+    @Override
+    public List<Map<String, Object>> getDevicesSensorsAvgDataToExcel(Map<String, Object> parameters) throws Exception {
+        if ("month".equals(parameters.get("type"))) {
+            parameters.put("timeUnits", "daily");
+            parameters.put("typeFormat", "%Y-%m-%d");
+            String time = parameters.get("time") + "-01T00:00:00";
+            LocalDateTime value = LocalDateTime.parse(time);
+            LocalDateTime start = value.with(TemporalAdjusters.firstDayOfMonth());
+            LocalDateTime end = value.with(TemporalAdjusters.lastDayOfMonth());
+            parameters.put("start", start);
+            parameters.put("end", end);
+            int day = end.getDayOfMonth();
+            List<String> timeList = new ArrayList<>();
+            for (int i = 0; i <= day - 1; i++) {
+                timeList.add(start.plusDays(i).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+            }
+            parameters.put("timeList", timeList);
+        } else if ("day".equals(parameters.get("type"))) {
+            String time = parameters.get("time") + "T00:00:00";
+            LocalDateTime value = LocalDateTime.parse(time);
+            LocalDateTime end = value.plusHours(23);
+            parameters.put("timeUnits", "hourly");
+            parameters.put("typeFormat", "%Y-%m-%d %H:%i");
+            parameters.put("start", time);
+            parameters.put("end", end);
+            List<String> timeList = new ArrayList<>();
+            for (int i = 0; i <= 23; i++) {
+                timeList.add(value.plusHours(i).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")));
+            }
+            parameters.put("timeList", timeList);
+        }
+        return historyMinutelyMapper.getDevicesSensorsAvgDataToExcel(parameters);
+    }
+
 }
diff --git a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
index a9f03ea..9008efe 100644
--- a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
@@ -378,7 +378,6 @@
             startTime = localDate + " " + startHour + ":00:00";
         }
         Map<String, Object> map = historyMapper.getAVGValueByMacAndTimeslot(mac, startTime, endTime);
-        System.out.println(map);
         Map<String, Object> returnMap = new HashMap<>();
         if (map.isEmpty()) {
             returnMap.put("AQI", "N/V");
@@ -465,7 +464,6 @@
             startTime = localDate + " " + startHour + ":00:00";
         }
         Map<String, Object> map = historyMapper.getMonitorPointAVGValueByMonitorPointIdAndTimeslot(monitor_point_id, startTime, endTime);
-        System.out.println(map);
         Map<String, Object> returnMap = new HashMap<>();
         if (map.isEmpty()) {
             returnMap.put("AQI", "N/V");
diff --git a/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java b/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java
index da6e198..cb68b39 100644
--- a/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/OrganizationServiceImpl.java
@@ -1,7 +1,5 @@
 package com.moral.service.impl;
 
-import static com.moral.common.bean.Constants.IS_DELETE_FALSE;
-
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
@@ -32,6 +30,8 @@
 import tk.mybatis.mapper.entity.Example;
 import tk.mybatis.mapper.entity.Example.Criteria;
 
+import static com.moral.common.bean.Constants.IS_DELETE_FALSE;
+
 @Service
 public class OrganizationServiceImpl implements OrganizationService {
 
@@ -41,170 +41,178 @@
     @Resource
     private OrganizationRelationMapper organizationRelationMapper;
 
-	private static Class ENTITY_CLASS = Organization.class;
+    private static Class ENTITY_CLASS = Organization.class;
 
     @Override
-    public Set<Integer> getChildOrganizationIds(Integer orgId){
-    	Set<Integer> orgIds = new HashSet<Integer>();
-    	orgIds.add(orgId);
-    	OrganizationRelation relation = new OrganizationRelation();
-    	relation.setParentId(orgId);
-    	Organization organization = organizationMapper.selectByPrimaryKey(orgId);
-    	if (IS_DELETE_FALSE.equals(organization.getIsDelete())) {
-    		List<OrganizationRelation> organizationRelations = organizationRelationMapper.select(relation);
-    		for (OrganizationRelation organizationRelation : organizationRelations) {
-    			Set<Integer> organizationIds = getChildOrganizationIds(organizationRelation.getChildId());
-    			orgIds.addAll(organizationIds);
-    		}
-		}
-    	return orgIds;
+    public Set<Integer> getChildOrganizationIds(Integer orgId) {
+        Set<Integer> orgIds = new HashSet<Integer>();
+        orgIds.add(orgId);
+        OrganizationRelation relation = new OrganizationRelation();
+        relation.setParentId(orgId);
+        Organization organization = organizationMapper.selectByPrimaryKey(orgId);
+        if (IS_DELETE_FALSE.equals(organization.getIsDelete())) {
+            List<OrganizationRelation> organizationRelations = organizationRelationMapper.select(relation);
+            for (OrganizationRelation organizationRelation : organizationRelations) {
+                Set<Integer> organizationIds = getChildOrganizationIds(organizationRelation.getChildId());
+                orgIds.addAll(organizationIds);
+            }
+        }
+        return orgIds;
     }
 
 
-	@Override
-	public List<Organization> getOrganizationsByAreaName(Map<String, Object> parameters) {
-		ValidateUtil.notNull(parameters.get("areaName"), "param.is.null");
-		List<Organization> organizations = organizationMapper.getOrganizationsByAreaName(parameters);
-		return organizations;
-	}
+    @Override
+    public List<Organization> getOrganizationsByAreaName(Map<String, Object> parameters) {
+        ValidateUtil.notNull(parameters.get("areaName"), "param.is.null");
+        List<Organization> organizations = organizationMapper.getOrganizationsByAreaName(parameters);
+        return organizations;
+    }
 
-	@Override
-	public PageBean queryByPageBean(PageBean pageBean){
-		Example example = ExampleUtil.generateExample(ENTITY_CLASS,pageBean);
-		List<Example.Criteria> criteriaList = example.getOredCriteria();
-		if(criteriaList!=null&&criteriaList.size()>0){
-			for(Example.Criteria cri : criteriaList){
-				cri.andNotEqualTo("isDelete",Constants.IS_DELETE_TRUE);
-			}
-		}else {
-			example.or().andNotEqualTo("isDelete",Constants.IS_DELETE_TRUE);
-		}
-		if(pageBean.getPageSize()>0){
-			PageHelper.startPage(pageBean.getPageIndex(),pageBean.getPageSize());
-		}
-		if(example.getOrderByClause() == null || example.getOrderByClause().isEmpty()) {
-			example.setOrderByClause("create_time desc");
-		}
-		List<Organization> organizationList = organizationMapper.selectWithAreaNameByExample(example);
-		return new PageBean(organizationList);
-	}
-	@Override
-	public void addOrModify(Organization organization){
-		try{
-			if(organization.getId()==null){
-				//���������������������������������������
-				organization.setIsDelete(Constants.IS_DELETE_FALSE);
-				organizationMapper.insertSelective(organization);
-			}else{
-				organizationMapper.updateByPrimaryKey(organization);
-			}
-			if(organization.getId()!=null && !organization.getId().equals(organization.getParentId())){
-				List<Integer> orgIds = organizationMapper.selectLowerOrgIds(organization.getId());
-				boolean isChild = orgIds.stream().anyMatch(
-						item -> {
-							return item!=null && item.equals(organization.getParentId());
-						}
-				);
-				// ������������������������������������������������������������
-				if(!isChild){
-					//���������������������
-					addOrModifyOrgRelation(organization);
-				}else{
-					throw new BusinessException("cannot set the children as father,organization:"+ JSON.toJSONString(organization));
-				}
-			}else {
-				throw new BusinessException("id of organization can't equal to it's parentId,organization:"+ JSON.toJSONString(organization));
-			}
-		}
-		catch (Exception ex){
-			throw  ex;
-		}
-	}
-    @Transient
-	private void addOrModifyOrgRelation(Organization organization){
-    	OrganizationRelation relation = new OrganizationRelation();
-    	relation.setChildId(organization.getId());
-    	List<OrganizationRelation> relations =  organizationRelationMapper.select(relation);
-    	if(CollectionUtils.isEmpty(relations)){
-    		if (!ObjectUtils.isEmpty(organization.getParentId())) {
-    			relation.setParentId(organization.getParentId());
-    			organizationRelationMapper.insert(relation);
-			}
-		}else{
-				OrganizationRelation relationOfSelect = relations.get(0);
-				//���������������������������������������
-				if(organization.getParentId() !=null &&
-                   !organization.getParentId().equals(relationOfSelect.getParentId())
-                    ) {
-                    relationOfSelect.setParentId(organization.getParentId());
-                    organizationRelationMapper.updateByPrimaryKey(relationOfSelect);
-                }else if(organization.getParentId() ==null){
-				    //ParentI���null���������������������
-                    organizationRelationMapper.deleteByPrimaryKey(relationOfSelect.getId());
+    @Override
+    public PageBean queryByPageBean(PageBean pageBean) {
+        Example example = ExampleUtil.generateExample(ENTITY_CLASS, pageBean);
+        List<Example.Criteria> criteriaList = example.getOredCriteria();
+        if (criteriaList != null && criteriaList.size() > 0) {
+            for (Example.Criteria cri : criteriaList) {
+                cri.andNotEqualTo("isDelete", Constants.IS_DELETE_TRUE);
+            }
+        } else {
+            example.or().andNotEqualTo("isDelete", Constants.IS_DELETE_TRUE);
+        }
+        if (pageBean.getPageSize() > 0) {
+            PageHelper.startPage(pageBean.getPageIndex(), pageBean.getPageSize());
+        }
+        if (example.getOrderByClause() == null || example.getOrderByClause().isEmpty()) {
+            example.setOrderByClause("create_time desc");
+        }
+        List<Organization> organizationList = organizationMapper.selectWithAreaNameByExample(example);
+        return new PageBean(organizationList);
+    }
+
+    @Override
+    public void addOrModify(Organization organization) {
+        try {
+            if (organization.getId() == null) {
+                //���������������������������������������
+                organization.setIsDelete(Constants.IS_DELETE_FALSE);
+                organizationMapper.insertSelective(organization);
+            } else {
+                organizationMapper.updateByPrimaryKey(organization);
+            }
+            if (organization.getId() != null && !organization.getId().equals(organization.getParentId())) {
+                List<Integer> orgIds = organizationMapper.selectLowerOrgIds(organization.getId());
+                boolean isChild = orgIds.stream().anyMatch(
+                        item -> {
+                            return item != null && item.equals(organization.getParentId());
+                        }
+                );
+                // ������������������������������������������������������������
+                if (!isChild) {
+                    //���������������������
+                    addOrModifyOrgRelation(organization);
+                } else {
+                    throw new BusinessException("cannot set the children as father,organization:" + JSON.toJSONString(organization));
                 }
-				//������������������
-				if(relations.size()>1){
-					relations.remove(0);
-					List<Integer> relationIds = relations.stream().map(
-						element->{
-							return  element.getId();
-						}
-					).collect(Collectors.toList());
-					Example example = new Example(OrganizationRelation.class);
-					example.or().andIn("id",relationIds);
-					organizationRelationMapper.deleteByExample(example);
-				}
-		}
-	}
-	@Override
-	public void deleteByIds(Integer... ids) {
-    	Organization organization = new Organization();
-		organization.setIsDelete(Constants.IS_DELETE_TRUE);
-		if(ids!=null&&ids.length>0){
-			if(ids.length==1){
-				organization.setId(ids[0]);
-				organizationMapper.updateByPrimaryKeySelective(organization);
-			}else{
-				Example example = new Example(ENTITY_CLASS);
-				example.or().andIn("id", Arrays.asList(ids));
-				organizationMapper.updateByExampleSelective(organization,example);
-			}
+            } else {
+                throw new BusinessException("id of organization can't equal to it's parentId,organization:" + JSON.toJSONString(organization));
+            }
+        } catch (Exception ex) {
+            throw ex;
+        }
+    }
 
-		}
-	}
-	
-	@Override
-	public List<Organization> getOrganizationsByName(String name) {
-		ValidateUtil.notEmpty(name, "param.is.null");
-		Example example = new Example(Organization.class);
-		Criteria criteria = example.createCriteria();
+    @Transient
+    private void addOrModifyOrgRelation(Organization organization) {
+        OrganizationRelation relation = new OrganizationRelation();
+        relation.setChildId(organization.getId());
+        List<OrganizationRelation> relations = organizationRelationMapper.select(relation);
+        if (CollectionUtils.isEmpty(relations)) {
+            if (!ObjectUtils.isEmpty(organization.getParentId())) {
+                relation.setParentId(organization.getParentId());
+                organizationRelationMapper.insert(relation);
+            }
+        } else {
+            OrganizationRelation relationOfSelect = relations.get(0);
+            //���������������������������������������
+            if (organization.getParentId() != null &&
+                    !organization.getParentId().equals(relationOfSelect.getParentId())
+            ) {
+                relationOfSelect.setParentId(organization.getParentId());
+                organizationRelationMapper.updateByPrimaryKey(relationOfSelect);
+            } else if (organization.getParentId() == null) {
+                //ParentI���null���������������������
+                organizationRelationMapper.deleteByPrimaryKey(relationOfSelect.getId());
+            }
+            //������������������
+            if (relations.size() > 1) {
+                relations.remove(0);
+                List<Integer> relationIds = relations.stream().map(
+                        element -> {
+                            return element.getId();
+                        }
+                ).collect(Collectors.toList());
+                Example example = new Example(OrganizationRelation.class);
+                example.or().andIn("id", relationIds);
+                organizationRelationMapper.deleteByExample(example);
+            }
+        }
+    }
 
-		criteria.andEqualTo("isDelete", Constants.IS_DELETE_FALSE).andLike("name", "%" + name + "%");
-		example.or().andEqualTo("isDelete", Constants.IS_DELETE_FALSE).andCondition("getPY(name) like ", "%" + name + "%");
+    @Override
+    public void deleteByIds(Integer... ids) {
+        Organization organization = new Organization();
+        organization.setIsDelete(Constants.IS_DELETE_TRUE);
+        if (ids != null && ids.length > 0) {
+            if (ids.length == 1) {
+                organization.setId(ids[0]);
+                organizationMapper.updateByPrimaryKeySelective(organization);
+            } else {
+                Example example = new Example(ENTITY_CLASS);
+                example.or().andIn("id", Arrays.asList(ids));
+                organizationMapper.updateByExampleSelective(organization, example);
+            }
 
-		List<Organization> organizations = organizationMapper.selectByExample(example);
-		return organizations;
-	}
+        }
+    }
 
-	@Override
-	public Organization getOrganizationById(int id) {
-    	Example example = new Example(ENTITY_CLASS);
-    	example.or().andEqualTo("id",id);
-    	List<Organization> organizationList = organizationMapper.selectWithAreaNameByExample(example);
-		return organizationList.size()>0?organizationList.get(0):null;
-	}
+    @Override
+    public List<Organization> getOrganizationsByName(String name) {
+        ValidateUtil.notEmpty(name, "param.is.null");
+        Example example = new Example(Organization.class);
+        Criteria criteria = example.createCriteria();
+
+        criteria.andEqualTo("isDelete", Constants.IS_DELETE_FALSE).andLike("name", "%" + name + "%");
+        example.or().andEqualTo("isDelete", Constants.IS_DELETE_FALSE).andCondition("getPY(name) like ", "%" + name + "%");
+
+        List<Organization> organizations = organizationMapper.selectByExample(example);
+        return organizations;
+    }
+
+    @Override
+    public Organization getOrganizationById(int id) {
+        Example example = new Example(ENTITY_CLASS);
+        example.or().andEqualTo("id", id);
+        List<Organization> organizationList = organizationMapper.selectWithAreaNameByExample(example);
+        return organizationList.size() > 0 ? organizationList.get(0) : null;
+    }
 
     @Override
     public Organization getFatherOrg(int childId) {
         OrganizationRelation relation = new OrganizationRelation();
         relation.setChildId(childId);
         List<OrganizationRelation> relations = organizationRelationMapper.select(relation);
-        if (!CollectionUtils.isEmpty(relations)){
+        if (!CollectionUtils.isEmpty(relations)) {
             OrganizationRelation relationOfSelect = relations.get(0);
-            if(relationOfSelect.getParentId()!=null){
+            if (relationOfSelect.getParentId() != null) {
                 return organizationMapper.selectByPrimaryKey(relationOfSelect.getParentId());
             }
         }
         return null;
     }
+
+    @Override
+    public List<Organization> getOrganizationList(String organizationName) {
+        List<Organization> organizationList = organizationMapper.getOrganizationList(organizationName);
+        return organizationList;
+    }
 }
diff --git a/src/main/java/com/moral/service/impl/SensorServiceImpl.java b/src/main/java/com/moral/service/impl/SensorServiceImpl.java
index 77dca20..7d0c013 100644
--- a/src/main/java/com/moral/service/impl/SensorServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/SensorServiceImpl.java
@@ -1,27 +1,34 @@
 package com.moral.service.impl;
 
-import com.moral.common.bean.PageBean;
-import com.moral.common.util.MyBatisBaseMapUtil;
-import com.moral.entity.Sensor;
-import com.moral.mapper.SensorMapper;
-import com.moral.service.SensorService;
-
-import org.springframework.stereotype.Service;
-
-import tk.mybatis.mapper.entity.Example;
-
-import javax.annotation.Resource;
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.annotation.Resource;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.stereotype.Service;
+
+import com.moral.common.bean.PageBean;
+import com.moral.common.util.MyBatisBaseMapUtil;
+import com.moral.entity.Device;
+import com.moral.entity.MonitorPoint;
+import com.moral.entity.Sensor;
+import com.moral.mapper.SensorMapper;
+import com.moral.service.MonitorPointService;
+import com.moral.service.SensorService;
+
+import tk.mybatis.mapper.entity.Example;
+
 @Service
 public class SensorServiceImpl implements SensorService {
     @Resource
     SensorMapper sensorMapper;
+
+    @Resource
+    MonitorPointService monitorPointService;
 
     private static Class ENTITY_CLASS = Sensor.class;
 
@@ -142,4 +149,23 @@
         return sensorsMapList;
     }
 
+    @Override
+    public List<Sensor> selectSenosrsByOrgId(Map<String, Object> parameters) {
+        List<String> macList = new ArrayList<>();
+        List<MonitorPoint> monitorPoints = monitorPointService.getMonitorPointsAndDevicesByRegion(parameters);
+        for (MonitorPoint m : monitorPoints) {
+            for (Device d : m.getDevices()) {
+                macList.add(d.getMac());
+            }
+        }
+        parameters.put("macs", macList);
+        List<Sensor> sensors = new ArrayList<>();
+        if (!CollectionUtils.isEmpty(macList)) {
+            sensors = sensorMapper.selectSenosrsByOrgId(parameters);
+        } else {
+            sensors = sensorMapper.selectAll();
+        }
+        return sensors;
+    }
+
 }
diff --git a/src/main/java/com/moral/service/impl/SensorUnitServiceImpl.java b/src/main/java/com/moral/service/impl/SensorUnitServiceImpl.java
index 2d8b897..595a017 100644
--- a/src/main/java/com/moral/service/impl/SensorUnitServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/SensorUnitServiceImpl.java
@@ -1,31 +1,33 @@
 package com.moral.service.impl;
 
-import com.moral.entity.SensorUnit;
-import com.moral.mapper.SensorUnitMapper;
-import com.moral.service.SensorService;
-import com.moral.service.SensorUnitService;
-import org.apache.log4j.Logger;
-import org.springframework.data.annotation.Transient;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.annotation.Resource;
+
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Service;
+
+import com.moral.entity.SensorUnit;
+import com.moral.mapper.SensorUnitMapper;
+import com.moral.service.SensorService;
+import com.moral.service.SensorUnitService;
+
 @Service
-public class SensorUnitServiceImpl implements SensorUnitService{
+public class SensorUnitServiceImpl implements SensorUnitService {
     private static Logger log = Logger.getLogger(SensorService.class);
     @Resource
     private SensorUnitMapper sensorUnitMapper;
+
     @Override
     public boolean addOrModify(SensorUnit sensorUnit) {
         try {
-            if(sensorUnit.getId()!=null) {
+            if (sensorUnit.getId() != null) {
                 sensorUnit.setUpdateTime(new Date());
                 sensorUnitMapper.updateByPrimaryKeySelective(sensorUnit);
-            }else{
+            } else {
                 sensorUnit.setIsDelete(false);
                 sensorUnit.setCreateTime(new Date());
                 sensorUnitMapper.insertSelective(sensorUnit);
@@ -40,11 +42,12 @@
 
     @Override
     public List<SensorUnit> queryListBySensorId(int sensorId) {
-        return queryListBySensorId(sensorId,false);
+        return queryListBySensorId(sensorId, false);
     }
 
     /**
      * ���������������id ������ ���������������������
+     *
      * @param sensorId
      * @return
      */
@@ -53,85 +56,85 @@
         SensorUnit sensorUnitQuery = new SensorUnit();
         sensorUnitQuery.setSensorId(sensorId);
         sensorUnitQuery.setIsDelete(isDelete);
-        return  sensorUnitMapper.select(sensorUnitQuery);
+        return sensorUnitMapper.select(sensorUnitQuery);
     }
 
     /**
      * ���������������������������id ������
+     *
      * @param id
      */
     @Override
     public void remove(Integer id) {
-         SensorUnit sensorUnit = new SensorUnit();
-         sensorUnit.setId(id);
-         sensorUnit.setIsDelete(true);
-         sensorUnit.setUpdateTime(new Date());
-         sensorUnitMapper.updateByPrimaryKeySelective(sensorUnit);
+        SensorUnit sensorUnit = new SensorUnit();
+        sensorUnit.setId(id);
+        sensorUnit.setIsDelete(true);
+        sensorUnit.setUpdateTime(new Date());
+        sensorUnitMapper.updateByPrimaryKeySelective(sensorUnit);
     }
 
     /**
      * ���������������������������������
+     *
      * @param sensorIds
      * @return
      */
     @Override
-    public Map<Integer,List<SensorUnit>> queryGroupSensorBySids(List<Integer> sensorIds){
+    public Map<Integer, List<SensorUnit>> queryGroupSensorBySids(List<Integer> sensorIds) {
         SensorUnit sensorUnitQuery = new SensorUnit();
-        Map<Integer,List<SensorUnit>> resultListMap = new HashMap<>();
-        for(Integer sensorId: sensorIds) {
+        Map<Integer, List<SensorUnit>> resultListMap = new HashMap<>();
+        for (Integer sensorId : sensorIds) {
             sensorUnitQuery.setSensorId(sensorId);
             sensorUnitQuery.setIsDelete(false);
             List<SensorUnit> sensorUnitList = sensorUnitMapper.select(sensorUnitQuery);
-            if(sensorUnitList!=null&&sensorUnitList.size()>0){
-                resultListMap.put(sensorId,sensorUnitList);
+            if (sensorUnitList != null && sensorUnitList.size() > 0) {
+                resultListMap.put(sensorId, sensorUnitList);
             }
         }
-        return  resultListMap;
+        return resultListMap;
     }
 
-	@Override
-	public Map<String, Object> getSensorByMac(String mac) {
-		List<Map<String, Object>> list = sensorUnitMapper.getSensorsByDeviceMac(mac);
-		if (list!=null && !list.isEmpty()) {
-			Map<String, Object> sensorUnitMap = new HashMap<>();
-			for(Map<String, Object> sensorMap : list) {
-				String sensor_key = (String) sensorMap.get("sensor_key");
-				String name = (String) sensorMap.get("name");
-				sensorUnitMap.put(sensor_key, name);
-			}
-			System.out.println(sensorUnitMap);
-			return sensorUnitMap;
-		} else {
-			Map<String, Object> sensorUnitMap =  null;
-			return sensorUnitMap;
-		}
-	}
-	
-	@Override
-	public Map<String, Map<String, Object>> getSensorsByMonitPointId(String id) {
-		List<Map<String, Object>> list = sensorUnitMapper.getSensorsByMonitPointId(id);
-		System.out.println(list);
-		if (list!=null && !list.isEmpty()) {
-			Map<String, Map<String, Object>> sensorUnitMap = new HashMap<>();
-			for(Map<String, Object> sensorMap : list) {
-				Map<String, Object> innerMap = new HashMap<>();
-				innerMap.put("unit", sensorMap.get("unit"));
-				innerMap.put("name", sensorMap.get("name"));
-				innerMap.put("rules", sensorMap.get("rules"));
-				String sensor_key = (String) sensorMap.get("sensor_key");
-				sensorUnitMap.put(sensor_key, innerMap);
-			}
-			//System.out.println(sensorUnitMap);
-			return sensorUnitMap;
-		} else {
-			Map<String, Map<String, Object>> sensorUnitMap =  null;
-			return sensorUnitMap;
-		}
-	}
+    @Override
+    public Map<String, Object> getSensorByMac(String mac) {
+        List<Map<String, Object>> list = sensorUnitMapper.getSensorsByDeviceMac(mac);
+        if (list != null && !list.isEmpty()) {
+            Map<String, Object> sensorUnitMap = new HashMap<>();
+            for (Map<String, Object> sensorMap : list) {
+                String sensor_key = (String) sensorMap.get("sensor_key");
+                String name = (String) sensorMap.get("name");
+                sensorUnitMap.put(sensor_key, name);
+            }
+            return sensorUnitMap;
+        } else {
+            Map<String, Object> sensorUnitMap = null;
+            return sensorUnitMap;
+        }
+    }
 
-	@Override
-	public List<Map<String, Object>> getSensorsByMonitPointId2(String id) {
-		List<Map<String, Object>> list = sensorUnitMapper.getSensorsByMonitPointId(id);
-		return list;
-	}
+    @Override
+    public Map<String, Map<String, Object>> getSensorsByMonitPointId(String id) {
+        List<Map<String, Object>> list = sensorUnitMapper.getSensorsByMonitPointId(id);
+        if (list != null && !list.isEmpty()) {
+            Map<String, Map<String, Object>> sensorUnitMap = new HashMap<>();
+            for (Map<String, Object> sensorMap : list) {
+                Map<String, Object> innerMap = new HashMap<>();
+                innerMap.put("unit", sensorMap.get("unit"));
+                innerMap.put("name", sensorMap.get("name"));
+                innerMap.put("rules", sensorMap.get("rules"));
+                String sensor_key = (String) sensorMap.get("sensor_key");
+                sensorUnitMap.put(sensor_key, innerMap);
+            }
+            //System.out.println(sensorUnitMap);
+            return sensorUnitMap;
+        } else {
+            Map<String, Map<String, Object>> sensorUnitMap = null;
+            return sensorUnitMap;
+        }
+    }
+
+    @Override
+    public List<Map<String, Object>> getSensorsByMonitPointId2(String id) {
+        List<Map<String, Object>> list = sensorUnitMapper.getSensorsByMonitPointId(id);
+        return list;
+    }
 }
diff --git a/src/main/resources/mapper/HistoryMinutelyMapper.xml b/src/main/resources/mapper/HistoryMinutelyMapper.xml
index 26ef457..933a5e7 100644
--- a/src/main/resources/mapper/HistoryMinutelyMapper.xml
+++ b/src/main/resources/mapper/HistoryMinutelyMapper.xml
@@ -213,4 +213,33 @@
         order by rs.monitorPointName
     </select>
 
+    <select id="getDevicesSensorsAvgDataToExcel" resultType="java.util.LinkedHashMap">
+        select
+        rs.monitorPointName,rs.name,
+        <foreach collection="timeList" separator="," item="time">
+            max(case time when #{time} then rs.json else "" end) as #{time}
+        </foreach>
+        from
+        (SELECT
+        m.name as monitorPointName,d.name,DATE_FORMAT(time, #{typeFormat}) time,h.json
+        FROM
+        history_${timeUnits} h,
+        device d,
+        monitor_point m
+        WHERE
+        h.mac=d.mac
+        AND d.monitor_point_id=m.id
+        AND h.time >= #{start}
+        AND h.time <![CDATA[<=]]> #{end}
+        AND h.mac in
+        <foreach collection="macs" open="(" separator="," close=")"
+                 item="mac">
+            #{mac}
+        </foreach>
+        ORDER BY
+        h.mac) rs
+        GROUP BY rs.monitorPointName,rs.name
+        order by rs.monitorPointName
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/OrganizationMapper.xml b/src/main/resources/mapper/OrganizationMapper.xml
index 7865ab7..3450060 100644
--- a/src/main/resources/mapper/OrganizationMapper.xml
+++ b/src/main/resources/mapper/OrganizationMapper.xml
@@ -1,106 +1,117 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.moral.mapper.OrganizationMapper">
-  <resultMap id="BaseResultMap" type="com.moral.entity.Organization">
-    <id column="id" jdbcType="INTEGER" property="id" />
-    <result column="name" jdbcType="VARCHAR" property="name" />
-    <result column="rank" jdbcType="INTEGER" property="rank" />
-    <result column="province_code" jdbcType="INTEGER" property="provinceCode" />
-    <result column="city_code" jdbcType="INTEGER" property="cityCode" />
-    <result column="area_code" jdbcType="INTEGER" property="areaCode" />
-    <result column="town_code" jdbcType="BIGINT" property="townCode" />
-    <result column="village_code" jdbcType="BIGINT" property="villageCode" />
-    <result column="address" jdbcType="VARCHAR" property="address" />
-    <result column="telephone" jdbcType="VARCHAR" property="telephone" />
-    <result column="email" jdbcType="VARCHAR" property="email" />
-    <result column="is_delete" jdbcType="CHAR" property="isDelete" />
-    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
-    <result column="expire_time" jdbcType="TIMESTAMP" property="expireTime" />
-    <result column="description" jdbcType="VARCHAR" property="description" />
-      <!-- ������������������������������ -->
-      <association property="areaNames" javaType="com.moral.entity.AreaNames">
-          <result column="province_name" property="provinceName" jdbcType="VARCHAR" />
-          <result column="city_name" property="cityName" jdbcType="VARCHAR" />
-          <result column="area_name" property="areaName" jdbcType="VARCHAR" />
-          <result column="town_name" property="townName" jdbcType="VARCHAR" />
-          <result column="village_name" property="villageName" jdbcType="VARCHAR" />
-      </association>
-  </resultMap>
-  <sql id="Example_Where_Clause">
-    <where>
-      <foreach collection="oredCriteria" item="criteria" separator="or">
-        <if test="criteria.valid">
-          <trim prefix="(" prefixOverrides="and" suffix=")">
-            <foreach collection="criteria.criteria" item="criterion">
-              <choose>
-                <when test="criterion.noValue">
-                  and ${criterion.condition}
-                </when>
-                <when test="criterion.singleValue">
-                  and ${criterion.condition} #{criterion.value}
-                </when>
-                <when test="criterion.betweenValue">
-                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
-                </when>
-                <when test="criterion.listValue">
-                  and ${criterion.condition}
-                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+    <resultMap id="BaseResultMap" type="com.moral.entity.Organization">
+        <id column="id" jdbcType="INTEGER" property="id"/>
+        <result column="name" jdbcType="VARCHAR" property="name"/>
+        <result column="rank" jdbcType="INTEGER" property="rank"/>
+        <result column="province_code" jdbcType="INTEGER" property="provinceCode"/>
+        <result column="city_code" jdbcType="INTEGER" property="cityCode"/>
+        <result column="area_code" jdbcType="INTEGER" property="areaCode"/>
+        <result column="town_code" jdbcType="BIGINT" property="townCode"/>
+        <result column="village_code" jdbcType="BIGINT" property="villageCode"/>
+        <result column="address" jdbcType="VARCHAR" property="address"/>
+        <result column="telephone" jdbcType="VARCHAR" property="telephone"/>
+        <result column="email" jdbcType="VARCHAR" property="email"/>
+        <result column="is_delete" jdbcType="CHAR" property="isDelete"/>
+        <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
+        <result column="expire_time" jdbcType="TIMESTAMP" property="expireTime"/>
+        <result column="description" jdbcType="VARCHAR" property="description"/>
+        <!-- ������������������������������ -->
+        <association property="areaNames" javaType="com.moral.entity.AreaNames">
+            <result column="province_name" property="provinceName" jdbcType="VARCHAR"/>
+            <result column="city_name" property="cityName" jdbcType="VARCHAR"/>
+            <result column="area_name" property="areaName" jdbcType="VARCHAR"/>
+            <result column="town_name" property="townName" jdbcType="VARCHAR"/>
+            <result column="village_name" property="villageName" jdbcType="VARCHAR"/>
+        </association>
+    </resultMap>
+    <sql id="Example_Where_Clause">
+        <where>
+            <foreach collection="oredCriteria" item="criteria" separator="or">
+                <if test="criteria.valid">
+                    <trim prefix="(" prefixOverrides="and" suffix=")">
+                        <foreach collection="criteria.criteria" item="criterion">
+                            <choose>
+                                <when test="criterion.noValue">
+                                    and ${criterion.condition}
+                                </when>
+                                <when test="criterion.singleValue">
+                                    and ${criterion.condition} #{criterion.value}
+                                </when>
+                                <when test="criterion.betweenValue">
+                                    and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                                </when>
+                                <when test="criterion.listValue">
+                                    and ${criterion.condition}
+                                    <foreach close=")" collection="criterion.value" item="listItem" open="("
+                                             separator=",">
                     #{listItem}
                   </foreach>
-                </when>
-              </choose>
+                                </when>
+                            </choose>
+                        </foreach>
+                    </trim>
+                </if>
             </foreach>
-          </trim>
-        </if>
-      </foreach>
-    </where>
-  </sql>
-  <sql id="Base_Column_List">
+        </where>
+    </sql>
+    <sql id="Base_Column_List">
     id, name, rank, province_code, city_code, area_code, address, telephone, email, is_delete, 
     create_time, expire_time, description
   </sql>
-   <sql id="Relation_Province_City_Area_List">
+    <sql id="Relation_Province_City_Area_List">
        are.area_name, cti.city_name, pro.province_name,tow.town_name,vil.village_name
   </sql>
-  <select id="selectWithAreaNameByExample" parameterType="tk.mybatis.mapper.entity.Example" resultMap="BaseResultMap">
-    select
-    <if test="distinct">
+    <select id="selectWithAreaNameByExample" parameterType="tk.mybatis.mapper.entity.Example" resultMap="BaseResultMap">
+        select
+        <if test="distinct">
       distinct
     </if>
-      organization.*
-      ,
-      <include refid="Relation_Province_City_Area_List" />
-      from organization
-      left join village vil on organization.village_code = vil.village_code
-      left join town tow on organization.town_code = tow.town_code
-      left join area are on organization.area_code = are.area_code
-      left join city cti on organization.city_code = cti.city_code
-      left join province pro on organization.province_code = pro.province_code
-    <if test="_parameter != null">
-      <include refid="Example_Where_Clause" />
-    </if>
-    <if test="orderByClause != null">
+        organization.*
+        ,
+        <include refid="Relation_Province_City_Area_List"/>
+        from organization
+        left join village vil on organization.village_code = vil.village_code
+        left join town tow on organization.town_code = tow.town_code
+        left join area are on organization.area_code = are.area_code
+        left join city cti on organization.city_code = cti.city_code
+        left join province pro on organization.province_code = pro.province_code
+        <if test="_parameter != null">
+            <include refid="Example_Where_Clause"/>
+        </if>
+        <if test="orderByClause != null">
       order by ${orderByClause}
     </if>
-  </select>
-  	<select id="getOrganizationsByAreaName" resultType="com.moral.entity.Organization">
-		SELECT
-			o.*
-		FROM
-			organization o,
-			area a
-		<if test="cityName != null">
+    </select>
+    <select id="getOrganizationsByAreaName" resultType="com.moral.entity.Organization">
+        SELECT
+        o.*
+        FROM
+        organization o,
+        area a
+        <if test="cityName != null">
 			,city c
 		</if>
-		WHERE
-			o.area_code = a.area_code
-			AND a.area_name = #{areaName}
-		<if test="cityName != null">
+        WHERE
+        o.area_code = a.area_code
+        AND a.area_name = #{areaName}
+        <if test="cityName != null">
 			AND c.city_name = #{cityName}
 			AND o.city_code = c.city_code
 		</if>
-	</select>
+    </select>
     <select id="selectLowerOrgIds" resultType="java.lang.Integer">
             call proc_lowerOrgIds_GetByOrgId(#{orgId,jdbcType=INTEGER});
     </select>
+
+    <select id="getOrganizationList" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from organization
+        where is_delete=0
+        <if test="organizationName != 'null'">
+            and name like concat('%',#{organizationName},'%')
+        </if>
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/SensorMapper.xml b/src/main/resources/mapper/SensorMapper.xml
index b50c240..628c1b8 100644
--- a/src/main/resources/mapper/SensorMapper.xml
+++ b/src/main/resources/mapper/SensorMapper.xml
@@ -174,4 +174,28 @@
             AND d.mac = #{mac}
         </if>
     </select>
+
+    <select id="selectSenosrsByOrgId" resultMap="BaseResultMap">
+        select
+        distinct dvs.sensor_id as id,
+        s.name,s.sensor_key,s.unit,s.description
+        from
+        device_version_sensor dvs,
+        sensor s
+        where
+        dvs.device_version_id
+        in(
+        select
+        distinct d.device_version_id
+        from
+        device d
+        where
+        d.mac in
+        <foreach collection="macs" open="(" separator="," close=")"
+                 item="mac">
+            #{mac}
+        </foreach>
+        )
+        and dvs.sensor_id=s.id
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0