From 0fd34e51dadbf9598188b0e061b658139e6d6257 Mon Sep 17 00:00:00 2001
From: fengxiang <110431245@qq.com>
Date: Fri, 22 Jun 2018 13:47:51 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/main/resources/system/sysConfig.properties               |    2 
 src/main/java/com/moral/config/SwaggerConfig.java            |   42 ++++++++++
 src/main/java/com/moral/service/HistoryService.java          |    3 
 src/main/resources/mapper/HistoryMinutelyMapper.xml          |    2 
 src/main/java/com/moral/service/impl/HistoryServiceImpl.java |   80 ++++++++++++++++++++
 src/main/java/com/moral/mapper/HistoryMapper.java            |    4 +
 src/main/resources/mapper/HistoryMapper.xml                  |   64 +++++++++++++++
 pom.xml                                                      |   11 ++
 src/main/java/com/moral/controller/ScreenController.java     |   21 +++++
 9 files changed, 226 insertions(+), 3 deletions(-)

diff --git a/pom.xml b/pom.xml
index 7125301..f48af0d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -186,6 +186,17 @@
 			<scope>system</scope>
 			<systemPath>${project.basedir}/lib/taobao-sdk-java-auto_1455552377940-20160607.jar</systemPath>
 		</dependency>
+
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger2</artifactId>
+			<version>2.7.0</version>
+		</dependency>
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger-ui</artifactId>
+			<version>2.7.0</version>
+		</dependency>
 	</dependencies>
 
 	<build>
diff --git a/src/main/java/com/moral/config/SwaggerConfig.java b/src/main/java/com/moral/config/SwaggerConfig.java
new file mode 100644
index 0000000..3c3b136
--- /dev/null
+++ b/src/main/java/com/moral/config/SwaggerConfig.java
@@ -0,0 +1,42 @@
+package com.moral.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.Contact;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+@Configuration
+@EnableWebMvc
+@EnableSwagger2
+public class SwaggerConfig extends WebMvcConfigurerAdapter{
+	@Bean
+	public Docket myDocket() {
+		Docket docket = new Docket(DocumentationType.SWAGGER_2);
+		ApiInfo apiInfo = new ApiInfoBuilder().title("API������������").description("").contact(new Contact("", "", ""))
+				.version("1.0").build();
+		docket.apiInfo(apiInfo);
+		// ������������������Api������������������������Ctrl���������ApiOperation���������api���������������
+		docket.select().apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
+				.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)).build();
+		return docket;
+	}
+	
+	@Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        registry.addResourceHandler("swagger-ui.html")
+        .addResourceLocations("classpath:/META-INF/resources/");
+        registry.addResourceHandler("/webjars*")
+        .addResourceLocations("classpath:/META-INF/resources/webjars/");
+    }
+}
diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java
index 5f18891..d827c2a 100644
--- a/src/main/java/com/moral/controller/ScreenController.java
+++ b/src/main/java/com/moral/controller/ScreenController.java
@@ -61,6 +61,11 @@
 import com.moral.service.MonitorPointService;
 import com.moral.service.SensorService;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
 /**
  * The Class ScreenController.������������
  */
@@ -68,6 +73,7 @@
 @RequestMapping("/screen")
 //@CrossOrigin(origins = "*", maxAge = 3600)
 @SuppressWarnings({ "rawtypes", "unchecked", "unused" })
+@Api(tags = "Screen", description = "������������") 
 public class ScreenController {
 	public  static Logger log = Logger.getLogger(ScreenController.class);
     @Resource
@@ -534,4 +540,19 @@
 	public ResultBean<List<Integer>> getVersions(Integer mptid){
 		return  new ResultBean<>(monitorPointService.queryVersionsById(mptid));
 	}
+	
+	@GetMapping("region_ranking_data")
+	@ApiOperation(value = "������������������", notes = "������������������")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "regionCode", value = "���������", required = true, paramType = "query", dataType = "String"),
+			@ApiImplicitParam(name = "dimension", value = "������(profession���region���monitorPoint������)", required = true, paramType = "query", dataType = "String"),
+			@ApiImplicitParam(name = "sensorKey", value = "���������key", required = true, paramType = "query", dataType = "String"), 
+			@ApiImplicitParam(name = "accountId", value = "������id", required = true, paramType = "query", dataType = "int"), 
+	})
+	public ResultBean<List<Map<String, Object>>> getRegionRankingData(HttpServletRequest request){
+		Map<String, Object> parameters = getParametersStartingWith(request, null);
+		List<Map<String, Object>> list = historyService.getRegionRankingData(parameters);
+		return new ResultBean<List<Map<String, Object>>>(list);
+	}
+
 }
diff --git a/src/main/java/com/moral/mapper/HistoryMapper.java b/src/main/java/com/moral/mapper/HistoryMapper.java
index 68db071..3afddc2 100644
--- a/src/main/java/com/moral/mapper/HistoryMapper.java
+++ b/src/main/java/com/moral/mapper/HistoryMapper.java
@@ -10,4 +10,8 @@
 	String selectValueByMacAndTime(@Param("mac")String mac, @Param("time")Date time);
 	List<Map<String, Object>> getAreaAllDataByAccount(Map<String, Object> parameters);
 
+	List<Map<String, Object>> getRegionRankingData(Map<String, Object> parameters);
+
+	List<Map<String, Object>> selectNextLevelRegion(Map<String, Object> parameters);
+
 }
\ No newline at end of file
diff --git a/src/main/java/com/moral/service/HistoryService.java b/src/main/java/com/moral/service/HistoryService.java
index e08b6a6..dec4d08 100644
--- a/src/main/java/com/moral/service/HistoryService.java
+++ b/src/main/java/com/moral/service/HistoryService.java
@@ -1,6 +1,7 @@
 package com.moral.service;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 
 
@@ -11,4 +12,6 @@
 	Map<String, Object> getDeviceRankingBySensorAverage(Map<String, Object> parameters);
 
     String queryValueByMacAndTime(String mac, Date time);
+
+	List<Map<String, Object>> getRegionRankingData(Map<String, Object> parameters);
 }
diff --git a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
index 4a9748f..9eabd4d 100644
--- a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
@@ -8,9 +8,11 @@
 import org.springframework.stereotype.Service;
 
 import com.moral.common.util.ValidateUtil;
+import com.moral.entity.Profession;
 import com.moral.entity.Sensor;
 import com.moral.mapper.DeviceMapper;
 import com.moral.mapper.HistoryMapper;
+import com.moral.mapper.ProfessionMapper;
 import com.moral.mapper.SensorMapper;
 import com.moral.service.AccountService;
 import com.moral.service.HistoryService;
@@ -29,6 +31,9 @@
 
 	@Resource
 	private SensorMapper sensorMapper;
+
+    @Resource
+    private ProfessionMapper professionMapper;
 
 	@Override
 	public Map<String, Object> getAllSensorAverageByDevice(Map<String, Object> parameters) throws Exception {
@@ -79,4 +84,79 @@
 	public String queryValueByMacAndTime(String mac, Date time){
 		return  historyMapper.selectValueByMacAndTime(mac, time);
 	}
+
+	@Override
+	public List<Map<String, Object>> getRegionRankingData(Map<String, Object> parameters) {
+		ValidateUtil.notNull(parameters.get("regionCode"), "param.is.null");
+		ValidateUtil.notNull(parameters.get("dimension"), "param.is.null");
+		ValidateUtil.notNull(parameters.get("sensorKey"), "param.is.null");
+		ValidateUtil.notNull(parameters.get("accountId"), "param.is.null");
+
+		String regionCode = parameters.get("regionCode").toString();
+		String regionType = "village_code";
+		String nextLevel = "";
+		if (regionCode.length() == 6) {
+			if (regionCode.endsWith("0000")) {
+				regionType = "province_code";
+				nextLevel = "city";
+			} else if (regionCode.endsWith("00")) {
+				regionType = "city_code";
+				nextLevel = "area";
+			} else {
+				regionType = "area_code";
+				nextLevel = "town";
+			}
+		} else {
+			if (regionCode.endsWith("000")) {
+				regionType = "town_code";
+				nextLevel = "village";
+			}
+		}
+		parameters.put("regionType", regionType);
+		parameters.put("nextLevel", nextLevel);
+		parameters.put("start", LocalDateTime.now().minusMinutes(5));
+		
+		accountService.setOrgIdsByAccount(parameters);
+		List<Map<String, Object>> result = historyMapper.getRegionRankingData(parameters);
+		if ("profession".equals(parameters.get("dimension"))) {
+			List<Profession> professions = professionMapper.selectAll();
+			for (Map<String, Object> map : result) {
+				for (Profession profession : professions) {
+					if (map.get("name").equals(profession.getName())) {
+						professions.remove(profession);
+						break;
+					}
+				}
+			}
+			for (Profession profession : professions) {
+				Map<String, Object> map = new HashMap<String, Object>();
+				map.put("name", profession.getName());
+				map.put("avg", 0);
+				result.add(map);
+			}
+		} else if ("region".equals(parameters.get("dimension"))) {
+			List<Map<String, Object>> regions = historyMapper.selectNextLevelRegion(parameters);
+			for (int i = result.size() - 1; i >= 0; i--) {
+				Map<String, Object> map = result.get(i);
+				for (Map<String, Object> region : regions) {
+					if ((map.get("code") == null)) {
+						result.remove(map);
+						break;
+					} 
+					if (map.get("code").equals(region.get("code"))) {
+						map.put("name", region.get("name"));
+						regions.remove(region);
+						break;
+					}
+				}
+			}
+			for (Map<String, Object> region : regions) {
+				Map<String, Object> map = new HashMap<String, Object>();
+				map.put("name", region.get("name"));
+				map.put("avg", 0);
+				result.add(map);
+			}
+		}
+		return result;
+	}
 }
diff --git a/src/main/resources/mapper/HistoryMapper.xml b/src/main/resources/mapper/HistoryMapper.xml
index f7c82a8..2408a33 100644
--- a/src/main/resources/mapper/HistoryMapper.xml
+++ b/src/main/resources/mapper/HistoryMapper.xml
@@ -6,7 +6,7 @@
 		where  time = #{time} and mac = #{mac}
 		limit 0,1
 	</select>
-	<select id="getAreaAllDataByAccount" resultType="java.util.Map">
+	<select id="getAreaAllDataByAccount" resultType="java.util.LinkedHashMap">
 		SELECT
 			<if test="macKey != null">
 				d.`name`,
@@ -35,4 +35,66 @@
 			ORDER BY ${macKey} desc
 		</if>	
 	</select>
+
+	<select id="getRegionRankingData" resultType="java.util.Map">
+		SELECT
+			AVG( h.`value` -> '$.${sensorKey}[0]' ) avg ,
+			<if test="dimension == 'profession'">
+				p.`name`
+			</if>
+			<if test="dimension == 'monitorPoint'">
+				mp.`name`
+			</if>
+			<if test="dimension == 'region'">
+				mp.${nextLevel}_code AS 'code'
+			</if>
+		FROM
+			<if test="dimension == 'profession'">
+				profession p , 
+			</if>
+			device d,
+			history h,
+			monitor_point mp
+		WHERE
+			d.mac = h.mac 
+			AND d.is_delete = '0'
+			AND mp.is_delete = '0'
+			AND d.monitor_point_id = mp.id 
+			AND h.time >= #{start}
+			AND mp.${regionType} = #{regionCode}
+			<if test="dimension == 'profession'">
+				AND d.profession_id = p.id 
+			</if>
+			<if test="orgIds != null and orgIds.size &gt; 0">
+				AND mp.organization_id IN
+				<foreach  collection="orgIds" open="(" separator="," close=")" item="listItem">
+					#{listItem}
+				</foreach>
+			</if>
+		GROUP BY
+			<if test="dimension == 'profession'">
+				p.id
+			</if>
+			<if test="dimension == 'monitorPoint'">
+				mp.id
+			</if>
+			<if test="dimension == 'region'">
+				mp.${nextLevel}_code
+			</if>
+		ORDER BY
+			avg DESC
+		<if test="dimension == 'monitorPoint'">
+		LIMIT 0,50
+		</if>
+	</select>
+	
+	<select id="selectNextLevelRegion" resultType="java.util.Map">
+		SELECT
+			${nextLevel}_code AS 'code',
+			${nextLevel}_name AS 'name' 
+		FROM
+			${nextLevel}
+		WHERE
+			${regionType} = #{regionCode}
+	</select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/HistoryMinutelyMapper.xml b/src/main/resources/mapper/HistoryMinutelyMapper.xml
index d9c4cd8..1509a27 100644
--- a/src/main/resources/mapper/HistoryMinutelyMapper.xml
+++ b/src/main/resources/mapper/HistoryMinutelyMapper.xml
@@ -31,7 +31,7 @@
 		AND time &lt; #{end}
 	</select>
 	
-	<select id="getMonitorPointOrDeviceAvgData" resultType="java.util.Map">
+	<select id="getMonitorPointOrDeviceAvgData" resultType="java.util.LinkedHashMap">
 		SELECT
 			DATE_FORMAT(time, #{typeFormat}) time
 			<foreach  collection="sensorKeys" open="," separator="," item="sensorKey">
diff --git a/src/main/resources/system/sysConfig.properties b/src/main/resources/system/sysConfig.properties
index 62a5580..d7432f1 100644
--- a/src/main/resources/system/sysConfig.properties
+++ b/src/main/resources/system/sysConfig.properties
@@ -27,5 +27,5 @@
 e19-standard=50
 orgId=5
 password=123456
-noFilters=/**/*.css,/**/*.json,/alarm/**,/screen/**,/**/*.jsp,/**/*.js,/**/*.gif,/**/*.png,/**/*.ico,/**/*.html,/**/*.map,/machineactivate/**,/device/**,/sensor/**,/mobile/**,/page/**
+noFilters=/**/*.css,/**/*.json,/alarm/**,/screen/**,/**/*.jsp,/**/*.js,/**/*.gif,/**/*.png,/**/*.ico,/**/*.html,/**/*.map,/machineactivate/**,/device/**,/sensor/**,/mobile/**,/page/**,/swagger*/**,/v2/**,/webjars/**
 specialOrgIds=-1,5
\ No newline at end of file

--
Gitblit v1.8.0