From f9640a02ea2abd1369c179f3ec88a7f9d91dea62 Mon Sep 17 00:00:00 2001
From: xufenglei <xufenglei>
Date: Wed, 13 Mar 2019 14:09:45 +0800
Subject: [PATCH] 排放超标比例 报表

---
 src/main/java/com/moral/service/DeviceService.java                |    2 
 src/main/java/com/moral/service/impl/HistoryDailyServiceImpl.java |   30 +++++++
 src/main/resources/mapper/DeviceMapper.xml                        |    4 +
 src/main/java/com/moral/service/HistoryDailyService.java          |    2 
 src/main/java/com/moral/controller/ReportController.java          |   11 ++
 src/main/java/com/moral/mapper/DeviceMapper.java                  |    1 
 src/main/java/com/moral/mapper/HistoryDailyMapper.java            |    2 
 src/main/resources/mapper/HistoryDailyMapper.xml                  |   61 +++++++++++++++
 src/main/java/com/moral/controller/ScreenController.java          |  118 ++++++++++++++++++++++++++---
 src/main/java/com/moral/service/impl/DeviceServiceImpl.java       |    6 +
 10 files changed, 223 insertions(+), 14 deletions(-)

diff --git a/src/main/java/com/moral/controller/ReportController.java b/src/main/java/com/moral/controller/ReportController.java
index 30a2188..d191744 100644
--- a/src/main/java/com/moral/controller/ReportController.java
+++ b/src/main/java/com/moral/controller/ReportController.java
@@ -112,4 +112,15 @@
 		return new ResultBean<List<Map<String, Object>>>(result);
 	}
 
+
+	@GetMapping("overproof")
+	public ResultBean<Map> getOverproofData(HttpServletRequest request, JwtAuthenticationToken token) throws Exception {
+		Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
+		UserContext userContext = token.getPrincipal();
+		Integer orgId = userContext.getOrganizationId();
+		parameters.put("orgId", orgId);
+		//List<Map<String, Object>> result = null;
+		Map result = historyDailyService.getOverproofData(parameters);
+		return new ResultBean<Map>(result);
+	}
 }
diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java
index 24a34eb..e2cd8e5 100644
--- a/src/main/java/com/moral/controller/ScreenController.java
+++ b/src/main/java/com/moral/controller/ScreenController.java
@@ -3,24 +3,24 @@
 import static com.moral.common.util.ResourceUtil.getValue;
 import static com.moral.common.util.WebUtils.getParametersStartingWith;
 
-import java.io.*;
-import java.util.*;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Collectors;
+
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 
-import com.alibaba.fastjson.*;
-import com.moral.common.util.BeanUtils;
-import com.moral.common.util.ParameterUtils;
-import com.moral.common.util.StringUtils;
-import com.moral.entity.*;
-import com.moral.entity.alarm.AlarmConfig;
-import com.moral.entity.alarm.AlarmConfigValue;
-import com.moral.entity.charts.DataSortCondition;
-import com.moral.entity.layout.RealTimeDeviceLayout;
-import com.moral.service.*;
 import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang.math.NumberUtils;
 import org.apache.commons.net.ftp.FTPClient;
 import org.apache.log4j.Logger;
 import org.dom4j.Document;
@@ -31,17 +31,61 @@
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.ObjectUtils;
-import org.springframework.web.bind.annotation.*;
+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.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.servlet.ModelAndView;
 import org.xml.sax.InputSource;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.moral.common.bean.Constants;
 import com.moral.common.bean.JsonData;
 import com.moral.common.bean.PageResult;
 import com.moral.common.bean.ResultBean;
+import com.moral.common.util.BeanUtils;
+import com.moral.common.util.ParameterUtils;
 import com.moral.common.util.ValidateUtil;
 import com.moral.common.util.WebUtils;
 import com.moral.common.xml.Version;
+import com.moral.entity.Account;
+import com.moral.entity.AreaNames;
+import com.moral.entity.Device;
+import com.moral.entity.DeviceVersion;
+import com.moral.entity.MapBounds;
+import com.moral.entity.MonitorPoint;
+import com.moral.entity.Organization;
+import com.moral.entity.Region;
+import com.moral.entity.alarm.AlarmConfig;
+import com.moral.entity.alarm.AlarmConfigValue;
 import com.moral.entity.alarm.AlarmSensorLevel;
+import com.moral.entity.charts.DataSortCondition;
+import com.moral.entity.layout.RealTimeDeviceLayout;
+import com.moral.service.AccountService;
+import com.moral.service.AlarmConfigService;
+import com.moral.service.AlarmDailyService;
+import com.moral.service.AreaService;
+import com.moral.service.DeviceService;
+import com.moral.service.DeviceVersionService;
+import com.moral.service.DictionaryDataService;
+import com.moral.service.HangzhouAqiService;
+import com.moral.service.HistoryDailyService;
+import com.moral.service.HistoryMinutelyService;
+import com.moral.service.HistoryService;
+import com.moral.service.MachineActivateService;
+import com.moral.service.MonitorPointService;
+import com.moral.service.OrganizationLayoutService;
+import com.moral.service.OrganizationService;
+import com.moral.service.QualityDailyService;
+import com.moral.service.SensorService;
+import com.moral.service.WeatherService;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -789,4 +833,50 @@
 		Collection<Object> monitorPoints= monitorPointService.getDevicesStateByRegion(parameters);
 		return new ResultBean<Collection<Object>>(monitorPoints);
 	}
+	
+	@Resource
+	private HistoryDailyService historyDailyService;
+	
+	@GetMapping("emissions")
+	@ApiOperation(value = "���������", notes = "���������")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "organizationId",defaultValue = "5", value = "���������������������id", required = true, paramType = "query", dataType = "Integer"),
+			@ApiImplicitParam(name = "time",defaultValue = "2019", value = "���������������", required = true, paramType = "query", dataType = "String"),
+			@ApiImplicitParam(name = "sensorKey",defaultValue = "e27", value = "������������������������key", required = true, paramType = "query", dataType = "String"),
+			@ApiImplicitParam(name = "regionCode",defaultValue = "130000", value = "���������", required = true, paramType = "query", dataType = "String")
+	})
+	public ResultBean<List<Map<String, Object>>> getemissionsData(HttpServletRequest request) throws Exception {
+		Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
+		List<Map<String, Object>> result = historyDailyService.getEmissionsData(parameters);
+		return new ResultBean<List<Map<String, Object>>>(result);
+	}
+
+
+	@GetMapping("overproof")
+	@ApiOperation(value = "������������", notes = "������������")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "organizationId",defaultValue = "5", value = "���������������������id", required = true, paramType = "query", dataType = "Integer"),
+			@ApiImplicitParam(name = "time",defaultValue = "2019", value = "���������������", required = true, paramType = "query", dataType = "String"),
+			@ApiImplicitParam(name = "sensorKey",defaultValue = "e27", value = "������������������������key", required = true, paramType = "query", dataType = "String"),
+			@ApiImplicitParam(name = "overproofRatio",defaultValue = "0", value = "������������(0,1,2,3)(������,������100%,������200%,������300%)", required = true, paramType = "query", dataType = "String"),
+			@ApiImplicitParam(name = "regionCode",defaultValue = "130000", value = "���������", required = true, paramType = "query", dataType = "String")
+	})
+	public ResultBean<Map> getOverproofData(HttpServletRequest request) throws Exception {
+		Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
+		Map result = historyDailyService.getOverproofData(parameters);
+		return new ResultBean<Map>(result);
+	}
+
+	@GetMapping("limit-device")
+	@ApiOperation(value = "���������������������������", notes = "���������������������������")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "mac",defaultValue = "p5dnd7a0391956", value = "������mac���", required = true, paramType = "query", dataType = "String")
+	})
+	public ResultBean<Map<String, Object>> getLimitDataByDevice(HttpServletRequest request) throws Exception {
+		Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
+		String density = deviceService.getLimitDataByDevice(parameters);
+		JSONObject parseObject = JSONObject.parseObject(density);
+		return new ResultBean<Map<String, Object>>(parseObject);
+	}
+
 }
diff --git a/src/main/java/com/moral/mapper/DeviceMapper.java b/src/main/java/com/moral/mapper/DeviceMapper.java
index 70c23aa..2d4ae0f 100644
--- a/src/main/java/com/moral/mapper/DeviceMapper.java
+++ b/src/main/java/com/moral/mapper/DeviceMapper.java
@@ -41,4 +41,5 @@
 	List<Map<String, Object>> getDevicesStateByRegion(Map<String, Object> parameters);
 
 	List<Device> getDeviceList(Example example);
+	String getLimitDataByDevice(Map<String, Object> parameters);
 }
\ No newline at end of file
diff --git a/src/main/java/com/moral/mapper/HistoryDailyMapper.java b/src/main/java/com/moral/mapper/HistoryDailyMapper.java
index 2c6cc90..7a0c48f 100644
--- a/src/main/java/com/moral/mapper/HistoryDailyMapper.java
+++ b/src/main/java/com/moral/mapper/HistoryDailyMapper.java
@@ -7,4 +7,6 @@
 
 	List<Map<String, Object>> getEmissionsData(Map<String, Object> parameters);
 
+	List<Map<String, Object>> getOverproofData(Map<String, Object> parameters);
+
 }
diff --git a/src/main/java/com/moral/service/DeviceService.java b/src/main/java/com/moral/service/DeviceService.java
index 8181d0a..ce6b075 100644
--- a/src/main/java/com/moral/service/DeviceService.java
+++ b/src/main/java/com/moral/service/DeviceService.java
@@ -56,4 +56,6 @@
 
 	void saveOrUpdate4Mobile(Device device, DeviceProperty deviceProperty);
 
+	String getLimitDataByDevice(Map<String, Object> parameters);
+
 }
diff --git a/src/main/java/com/moral/service/HistoryDailyService.java b/src/main/java/com/moral/service/HistoryDailyService.java
index b06a3ba..fa19eb8 100644
--- a/src/main/java/com/moral/service/HistoryDailyService.java
+++ b/src/main/java/com/moral/service/HistoryDailyService.java
@@ -6,4 +6,6 @@
 public interface HistoryDailyService {
 	List<Map<String, Object>> getEmissionsData(Map<String, Object> parameters) throws Exception;
 
+	Map getOverproofData(Map<String, Object> parameters) throws Exception;
+
 }
diff --git a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
index 79afd10..b36e58b 100644
--- a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
@@ -604,4 +604,10 @@
 		
 	}
 
+	@Override
+	public String getLimitDataByDevice(Map<String, Object> parameters) {
+		// TODO Auto-generated method stub
+		return deviceMapper.getLimitDataByDevice(parameters);
+	}
+
 }
diff --git a/src/main/java/com/moral/service/impl/HistoryDailyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryDailyServiceImpl.java
index 6c6bcea..8517875 100644
--- a/src/main/java/com/moral/service/impl/HistoryDailyServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/HistoryDailyServiceImpl.java
@@ -91,4 +91,34 @@
 		}
 	}
 
+	@Override
+	public Map getOverproofData(Map<String, Object> parameters) throws Exception {
+		getAllchildrenOrg(parameters);
+		ParameterUtils.getTimeType4Time(parameters);
+		ParameterUtils.getElementByType(parameters);
+		ParameterUtils.getStartAndEndByTime(parameters);
+		ParameterUtils.getRegionType4RegionCode(parameters);
+		List<Map<String, Object>> list = historyDailyMapper.getOverproofData(parameters);
+		Map<String, Map<String, Object>[]> resultMap = new HashMap<String, Map<String, Object>[]>();
+		for (Map<String, Object> map : list) {
+			String name = map.get("name").toString();
+			Integer deviceTech = Integer.valueOf(map.get("device_tech").toString());
+			Map<String,Object>[] resultlist ;
+			if (resultMap.containsKey(name)) {
+				resultlist = resultMap.get(name);
+			} else {
+				resultlist = new HashMap[3];
+			}
+			resultlist[deviceTech-1] = new HashMap<String,Object>() {
+				private static final long serialVersionUID = 1L;
+				{
+					put("avg", map.get("avg"));
+					put("limit", map.get("limit"));
+				}
+			};
+			resultMap.put(name, resultlist);
+		}
+		return resultMap;
+	}
+
 }
diff --git a/src/main/resources/mapper/DeviceMapper.xml b/src/main/resources/mapper/DeviceMapper.xml
index 2932898..68910e8 100644
--- a/src/main/resources/mapper/DeviceMapper.xml
+++ b/src/main/resources/mapper/DeviceMapper.xml
@@ -414,4 +414,8 @@
 			</if>
 		)
 	</select>
+	
+	<select id="getLimitDataByDevice" resultType="String">
+		SELECT limit_val FROM view_device_density WHERE mac = #{mac}
+	</select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/HistoryDailyMapper.xml b/src/main/resources/mapper/HistoryDailyMapper.xml
index 549b64f..6fa840a 100644
--- a/src/main/resources/mapper/HistoryDailyMapper.xml
+++ b/src/main/resources/mapper/HistoryDailyMapper.xml
@@ -33,4 +33,65 @@
 		</where>
 		GROUP BY mp.`name`, vdi.mac
 	</select>
+
+
+	<select id="getOverproofData" resultType="java.util.Map">
+		SELECT
+			AVG( hd.`json` -> '$.${sensorKey}[0]' ) avg,
+			( SELECT DISTINCT limit_val ->> '$.${sensorKey}' FROM view_device_density WHERE monitor_point_id = vdd.monitor_point_id AND device_tech = vdd.device_tech ) `limit`,
+			( SELECT mp.`name` FROM monitor_point mp WHERE mp.id = vdd.monitor_point_id ) `name`,
+			vdd.device_tech 
+		FROM	
+			history_daily hd,
+			view_device_density vdd,
+			(
+				SELECT
+					vdd.monitor_point_id 
+				FROM
+					history_daily hd,
+					device vdd,
+					monitor_point mp 
+				<where>
+					hd.mac = vdd.mac 
+					AND mp.id = vdd.monitor_point_id 
+					<if test="start != null">
+						AND hd.time >= #{start}
+					</if>
+					<if test="end != null">
+						AND hd.time &lt; #{end}
+					</if>
+					<if test="regionCode != null">
+						AND mp.${regionType}_code = #{regionCode}
+					</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>
+				</where>
+				GROUP BY
+					vdd.mac,
+					vdd.monitor_point_id 
+				HAVING
+					AVG( hd.`json` -> '$.${sensorKey}[0]' ) >= ( SELECT limit_val ->> '$.${sensorKey}' FROM view_device_density WHERE mac = vdd.mac ) * (1 + #{overproofRatio} * 1) 
+					<if test="overproofRatio != 0 and overproofRatio != 3">
+					AND AVG( hd.`json` -> '$.${sensorKey}[0]' ) &lt; ( SELECT limit_val ->> '$.${sensorKey}' FROM view_device_density WHERE mac = vdd.mac ) * (2 + #{overproofRatio} * 1) 
+					</if>
+			) ta 
+		<where>
+			hd.mac = vdd.mac 
+			AND vdd.monitor_point_id = ta.monitor_point_id 
+			<if test="start != null">
+				AND hd.time >= #{start}
+			</if>
+			<if test="end != null">
+				AND hd.time &lt; #{end}
+			</if>
+		</where>
+		GROUP BY
+			vdd.monitor_point_id,
+			vdd.device_tech
+		</select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0