From 5f1807ece119b2337ed71b575292e47a447cd154 Mon Sep 17 00:00:00 2001
From: xufenglei <xufenglei>
Date: Thu, 28 Feb 2019 16:43:09 +0800
Subject: [PATCH] 排放量 报表

---
 src/main/java/com/moral/service/impl/HistoryDailyServiceImpl.java |   94 +++++++++++++++
 src/main/resources/mapper/DeviceMapper.xml                        |    6 
 src/main/java/com/moral/controller/ReportController.java          |   17 ++
 src/main/java/com/moral/common/bean/ResultBean.java               |    3 
 src/main/java/com/moral/controller/MobileController.java          |   25 +++
 src/main/resources/mapper/HistoryDailyMapper.xml                  |   36 ++++++
 src/main/java/com/moral/service/impl/DeviceServiceImpl.java       |   48 ++++++++
 src/main/java/com/moral/service/DeviceService.java                |    5 
 src/main/resources/system/sysConfig.properties                    |    2 
 src/main/java/com/moral/common/util/ParameterUtils.java           |   20 +++
 src/main/java/com/moral/service/HistoryDailyService.java          |    9 +
 src/main/java/com/moral/entity/adapter/EquDeviceAdapter.java      |   33 ++++-
 src/main/java/com/moral/mapper/HistoryDailyMapper.java            |   10 +
 13 files changed, 295 insertions(+), 13 deletions(-)

diff --git a/src/main/java/com/moral/common/bean/ResultBean.java b/src/main/java/com/moral/common/bean/ResultBean.java
index e0c2d60..848cf76 100644
--- a/src/main/java/com/moral/common/bean/ResultBean.java
+++ b/src/main/java/com/moral/common/bean/ResultBean.java
@@ -14,6 +14,7 @@
 	public static final int NO_PERMISSION = 2;
 	private String message;
 	private Integer code;
+	private Integer errno;
 	private T data;
 
 	public ResultBean() {
@@ -30,12 +31,14 @@
 	public ResultBean(Throwable e) {
 		this.message = e.toString();
 		this.code = FAIL;
+		this.errno = 1;
 	}
 
 	public ResultBean(T data) {
 		this.message = "success";
 		this.code = SUCCESS;
 		this.data = data;
+		this.errno = 0;
 	}
 
 	public ResultBean(String message, int code) {
diff --git a/src/main/java/com/moral/common/util/ParameterUtils.java b/src/main/java/com/moral/common/util/ParameterUtils.java
index 8e5e06d..36d4cfb 100644
--- a/src/main/java/com/moral/common/util/ParameterUtils.java
+++ b/src/main/java/com/moral/common/util/ParameterUtils.java
@@ -1,7 +1,11 @@
 package com.moral.common.util;
 
+import java.text.ParseException;
 import java.util.Calendar;
+import java.util.Date;
 import java.util.Map;
+
+import org.apache.commons.lang3.time.DateUtils;
 
 public class ParameterUtils {
 
@@ -78,4 +82,20 @@
 			}
 		}
 	}
+	
+	public static void getStartAndEndByTime(Map<String, Object> parameters) throws ParseException {
+		String time = (String) parameters.get("time");
+		String format = (String) parameters.get("format");
+		Integer field = Integer.valueOf(parameters.get("field").toString());
+		Date start = DateUtils.parseDate(time, format);
+
+		Calendar instance = Calendar.getInstance();
+		instance.setTime(start);
+		instance.add(field, 1);
+		Date end = instance.getTime();
+
+		parameters.put("start", start);
+		parameters.put("end", end);
+	}
+
 }
diff --git a/src/main/java/com/moral/controller/MobileController.java b/src/main/java/com/moral/controller/MobileController.java
index de362b3..69d12d8 100644
--- a/src/main/java/com/moral/controller/MobileController.java
+++ b/src/main/java/com/moral/controller/MobileController.java
@@ -13,6 +13,7 @@
 import org.springframework.cglib.beans.BeanMap;
 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.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
@@ -118,7 +119,8 @@
 	 */
 	@RequestMapping("reportDevice")
 	public AppData<String> installDevice(EquDeviceAdapter equDeviceAdapter) {
-		deviceService.addOrModify(equDeviceAdapter.toDevice());
+		//deviceService.addOrModify(equDeviceAdapter.toDevice());
+		deviceService.saveOrUpdate4Mobile(equDeviceAdapter.toDevice(), equDeviceAdapter.getDeviceProperty());
 		return new AppData<String>("");
 	}
 
@@ -329,11 +331,30 @@
 		return new ResultBean<List<Map<String, Object>>>(sensors);
 	}
 	
-	@RequestMapping("profession-provincecode")
+	@GetMapping("profession-provincecode")
+	@ApiOperation(value = "���������code������������������", notes = "���������code������������������")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "provinceCode", value = "���code", required = true, paramType = "query", dataType = "String")
+	})
 	public ResultBean<List<Profession>> getProfessionByProvinceCode(HttpServletRequest request){
 		Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
 		List<Profession> professions = professionService.getProfessiontList(parameters);
 		return new ResultBean<List<Profession>>(professions);
 	}
 
+	@PostMapping("update-maintenance")
+	@ApiOperation(value = "������������������������������������", notes = "������������������������������������")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "id", value = "������ID", required = true, paramType = "query", dataType = "int") ,
+			@ApiImplicitParam(name = "old_state", value = "������������������", required = true, paramType = "query", dataType = "String"),
+			@ApiImplicitParam(name = "new_state", value = "������������������", required = true, paramType = "query", dataType = "String") 
+			
+	})
+	public ResultBean offLinToMaintenance(HttpServletRequest request) {
+		Map<String, Object> parameters = getParametersStartingWith(request, null);
+		deviceService.offLinToMaintenance(parameters);
+		ResultBean resultBean = new ResultBean(parameters);
+		return resultBean;
+	}
+
 }
diff --git a/src/main/java/com/moral/controller/ReportController.java b/src/main/java/com/moral/controller/ReportController.java
index b95ea24..30a2188 100644
--- a/src/main/java/com/moral/controller/ReportController.java
+++ b/src/main/java/com/moral/controller/ReportController.java
@@ -20,8 +20,12 @@
 import org.springframework.web.bind.annotation.RestController;
 
 import com.moral.common.bean.ResultBean;
+import com.moral.common.util.WebUtils;
 import com.moral.entity.charts.LineChartCriteria;
+import com.moral.security.auth.JwtAuthenticationToken;
+import com.moral.security.model.UserContext;
 import com.moral.service.AlarmDailyService;
+import com.moral.service.HistoryDailyService;
 import com.moral.service.HistoryMinutelyService;
 
 @SuppressWarnings({ "unchecked", "rawtypes" })
@@ -95,4 +99,17 @@
 		return new ResultBean<List<Map<String, Object>>>(result);
 	}
 
+	@Resource
+	private HistoryDailyService historyDailyService;
+	
+	@GetMapping("emissions")
+	public ResultBean<List<Map<String, Object>>> getemissionsData(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 = historyDailyService.getEmissionsData(parameters);
+		return new ResultBean<List<Map<String, Object>>>(result);
+	}
+
 }
diff --git a/src/main/java/com/moral/entity/adapter/EquDeviceAdapter.java b/src/main/java/com/moral/entity/adapter/EquDeviceAdapter.java
index 915f511..e971e29 100644
--- a/src/main/java/com/moral/entity/adapter/EquDeviceAdapter.java
+++ b/src/main/java/com/moral/entity/adapter/EquDeviceAdapter.java
@@ -1,19 +1,23 @@
 package com.moral.entity.adapter;
 
 import com.moral.entity.Device;
-import lombok.AccessLevel;
-import lombok.Data;
-import lombok.Getter;
-import lombok.Setter;
-
-import javax.persistence.Transient;
-
-import static lombok.AccessLevel.*;
+import com.moral.entity.DeviceProperty;
 
 public class EquDeviceAdapter {
     private Device device;
-    public EquDeviceAdapter(){
+    
+    private DeviceProperty deviceProperty;
+    
+    
+    public DeviceProperty getDeviceProperty() {
+		return deviceProperty;
+	}
+	public void setDeviceProperty(DeviceProperty deviceProperty) {
+		this.deviceProperty = deviceProperty;
+	}
+	public EquDeviceAdapter(){
         this.device = new Device();
+        this.deviceProperty = new DeviceProperty();
     }
     public void setDevice(Device device) {
         this.device = device;
@@ -51,6 +55,17 @@
     public void setProfessionId(Integer professionId) {
         device.setProfessionId(professionId);
     }
+    
+    public void setDeviceTech(Byte deviceTech) {
+        deviceProperty.setDeviceTech(deviceTech);
+    }
+    public void setExtC(String extC) {
+        deviceProperty.setExtC(extC);
+    }
+    public void setExtD(String extD) {
+        deviceProperty.setExtD(extD);
+    }
+    
     public Device toDevice(){
         return device;
     }
diff --git a/src/main/java/com/moral/mapper/HistoryDailyMapper.java b/src/main/java/com/moral/mapper/HistoryDailyMapper.java
new file mode 100644
index 0000000..2c6cc90
--- /dev/null
+++ b/src/main/java/com/moral/mapper/HistoryDailyMapper.java
@@ -0,0 +1,10 @@
+package com.moral.mapper;
+
+import java.util.List;
+import java.util.Map;
+
+public interface HistoryDailyMapper {
+
+	List<Map<String, Object>> getEmissionsData(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 cf06d71..8181d0a 100644
--- a/src/main/java/com/moral/service/DeviceService.java
+++ b/src/main/java/com/moral/service/DeviceService.java
@@ -51,4 +51,9 @@
 	void saveOrUpdate(Device device, DeviceProperty deviceProperty);
 
 	PageBean getDeviceList(PageBean pageBean);
+
+	void offLinToMaintenance(Map<String, Object> parameters);
+
+	void saveOrUpdate4Mobile(Device device, DeviceProperty deviceProperty);
+
 }
diff --git a/src/main/java/com/moral/service/HistoryDailyService.java b/src/main/java/com/moral/service/HistoryDailyService.java
new file mode 100644
index 0000000..b06a3ba
--- /dev/null
+++ b/src/main/java/com/moral/service/HistoryDailyService.java
@@ -0,0 +1,9 @@
+package com.moral.service;
+
+import java.util.List;
+import java.util.Map;
+
+public interface HistoryDailyService {
+	List<Map<String, Object>> getEmissionsData(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 aa940e3..79afd10 100644
--- a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
@@ -532,6 +532,7 @@
 	@Override
 	@Transactional
 	public void saveOrUpdate(Device device, DeviceProperty deviceProperty) {
+		device.setMac(device.getMac().toLowerCase());
 		if (ObjectUtils.isEmpty(device.getId())) {
 			device.setState(Constants.DEVICE_STATE_OFFLINE);
 			device.setIsDelete(Constants.IS_DELETE_FALSE);
@@ -556,4 +557,51 @@
 		return new PageBean(deviceList);
 	}
 
+	@Override
+	public void offLinToMaintenance(Map<String, Object> parameters) {
+		ValidateUtil.notNull(parameters.get("id"), "param.is.null");
+		ValidateUtil.notNull(parameters.get("old_state"), "param.is.null");
+		ValidateUtil.notNull(parameters.get("new_state"), "param.is.null");
+		int count = 0;
+		if ("4".equals(parameters.get("old_state")) && "9".equals(parameters.get("new_state"))) {
+			Device device = new Device();
+			Example example = new Example(ENTITY_CLASS);
+			example.and().andEqualTo("id", new Integer(parameters.get("id").toString())).andEqualTo("state", "4");
+			device.setState("9");
+			count = deviceMapper.updateByExampleSelective(device, example);
+		} 
+		if (count == 0) {
+			throw new BusinessException("������������������");
+		}
+	}
+
+	@Override
+	public void saveOrUpdate4Mobile(Device device, DeviceProperty deviceProperty) {
+		device.setMac(device.getMac().toLowerCase());
+		Device selectDevice = new Device();
+		selectDevice.setMac(device.getMac());
+		selectDevice = deviceMapper.selectOne(selectDevice);
+		if (ObjectUtils.isEmpty(selectDevice)) {
+			device.setState(Constants.DEVICE_STATE_OFFLINE);
+			device.setIsDelete(Constants.IS_DELETE_FALSE);
+			deviceMapper.insertSelective(device);
+			deviceProperty.setId(device.getId());
+			devicePropertyMapper.insertSelective(deviceProperty);
+		} else {
+			device.setId(selectDevice.getId());
+			deviceMapper.updateByPrimaryKeySelective(device);
+			deviceProperty.setId(selectDevice.getId());
+			devicePropertyMapper.selectByPrimaryKey(selectDevice.getId());
+			if (ObjectUtils.isEmpty(devicePropertyMapper.selectByPrimaryKey(deviceProperty.getId()))) {
+				devicePropertyMapper.insertSelective(deviceProperty);
+			} else {
+				devicePropertyMapper.updateByPrimaryKeySelective(deviceProperty);
+			}
+			
+		}
+		refreshDeviceInRedis(device.getMac());
+
+		
+	}
+
 }
diff --git a/src/main/java/com/moral/service/impl/HistoryDailyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryDailyServiceImpl.java
new file mode 100644
index 0000000..6c6bcea
--- /dev/null
+++ b/src/main/java/com/moral/service/impl/HistoryDailyServiceImpl.java
@@ -0,0 +1,94 @@
+package com.moral.service.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import com.moral.common.util.ParameterUtils;
+import com.moral.common.util.ResourceUtil;
+import com.moral.entity.Device;
+import com.moral.entity.DeviceProperty;
+import com.moral.mapper.HistoryDailyMapper;
+import com.moral.service.DeviceService;
+import com.moral.service.HistoryDailyService;
+import com.moral.service.OrganizationService;
+
+@Service
+public class HistoryDailyServiceImpl implements HistoryDailyService {
+	@Resource
+	private HistoryDailyMapper historyDailyMapper;
+	
+	@Resource
+	private OrganizationService organizationService;
+
+	@Resource
+	private DeviceService deviceService;
+
+	@Override
+	public List<Map<String, Object>> getEmissionsData(Map<String, Object> parameters) throws Exception {
+		String sensorKey = parameters.get("sensorKey").toString();
+		getAllchildrenOrg(parameters);
+		ParameterUtils.getTimeType4Time(parameters);
+		ParameterUtils.getElementByType(parameters);
+		ParameterUtils.getStartAndEndByTime(parameters);
+		ParameterUtils.getRegionType4RegionCode(parameters);
+		List<Map<String, Object>> list = historyDailyMapper.getEmissionsData(parameters);
+		
+		Map<String, Float> result = new HashMap<String, Float>();
+		
+		for (Map<String, Object> map : list) {
+			String mac = map.get("mac").toString();
+			String name = map.get("name").toString();
+			if (!ObjectUtils.isEmpty(map.get(sensorKey))) {
+				Float thickness = Float.valueOf(map.get(sensorKey).toString());
+				Device device = deviceService.getDeviceByMac(mac);
+				DeviceProperty deviceProperty = device.getDeviceProperty();
+				if (!ObjectUtils.isEmpty(deviceProperty)) {
+					String extC = deviceProperty.getExtC();
+					String extD = deviceProperty.getExtD();
+					if (!(ObjectUtils.isEmpty(extC) || ObjectUtils.isEmpty(extD))) {
+						Float acreage = Float.valueOf(extC);
+						Float windSpeed = Float.valueOf(extD);
+						Float emissions = thickness * acreage * windSpeed * 24 * 60 * 60 / 1000000;
+						if (result.containsKey(name)) {
+							result.put(name, emissions + result.get(name) );
+						} else {
+							result.put(name, emissions);
+						}
+					}
+				}
+
+			}
+		}
+		List<Map<String, Object>> resultMap = new ArrayList<Map<String,Object>>();
+		
+		for (Entry<String, Float> entry : result.entrySet()) {
+			resultMap.add(new HashMap<String, Object>() {
+				{
+					put("name", entry.getKey());
+					put("emissions", entry.getValue());
+				}
+			});
+		}
+		return resultMap;
+	}
+
+	private void getAllchildrenOrg(Map<String, Object> parameters) {
+		if (parameters.containsKey("orgId")) {
+			Integer orgId = Integer.valueOf(parameters.remove("orgId").toString());
+			if (!(-1 == orgId  || ResourceUtil.getValue("orgId").equals(orgId + ""))) {
+				Set<Integer> orgIds = organizationService.getChildOrganizationIds(orgId);
+				parameters.put("orgIds", orgIds);
+			}
+		}
+	}
+
+}
diff --git a/src/main/resources/mapper/DeviceMapper.xml b/src/main/resources/mapper/DeviceMapper.xml
index 5680b8d..2932898 100644
--- a/src/main/resources/mapper/DeviceMapper.xml
+++ b/src/main/resources/mapper/DeviceMapper.xml
@@ -45,6 +45,8 @@
 			<result column="device_tech" property="deviceTech" jdbcType="TINYINT" />
 			<result column="device_cat" property="deviceCat" jdbcType="TINYINT" />
 			<result column="device_source" property="deviceSource" jdbcType="VARCHAR" />
+			<result column="ext_c" property="extC" jdbcType="VARCHAR" />
+			<result column="ext_d" property="extD" jdbcType="VARCHAR" />
 		</association>
 	</resultMap>
 
@@ -394,7 +396,9 @@
 			mpt.province_code,
 			dp.device_tech,
 			dp.device_cat,
-			dp.device_source
+			dp.device_source,
+			dp.ext_c,
+			dp.ext_d
 		from device dev
 		left join operate_user ouser on dev.operate_user_id = ouser.id
 		left join device_version dvn on dev.device_version_id = dvn.id
diff --git a/src/main/resources/mapper/HistoryDailyMapper.xml b/src/main/resources/mapper/HistoryDailyMapper.xml
new file mode 100644
index 0000000..549b64f
--- /dev/null
+++ b/src/main/resources/mapper/HistoryDailyMapper.xml
@@ -0,0 +1,36 @@
+<?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.HistoryDailyMapper">
+	<select id="getEmissionsData" resultType="java.util.Map">
+		SELECT
+			SUM(hd.`json` ->'$.${sensorKey}[0]') AS '${sensorKey}',
+			vdi.mac,
+			mp.`name` 'name' 
+		FROM
+			history_daily hd,
+			view_device_info vdi,
+			monitor_point mp
+		<where>
+			hd.mac = vdi.mac
+			AND vdi.monitor_point_id = mp.id
+			AND vdi.device_tech = 1 
+			<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 mp.`name`, vdi.mac
+	</select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/system/sysConfig.properties b/src/main/resources/system/sysConfig.properties
index 8d92bd5..5e07f0b 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/**,/swagger*/**,/v2/**,/webjars/**,/demo/**,/report/**,/weixin/alarm-show
+noFilters=/**/*.css,/**/*.json,/alarm/**,/screen/**,/**/*.jsp,/**/*.js,/**/*.gif,/**/*.png,/**/*.ico,/**/*.html,/**/*.map,/machineactivate/**,/device/**,/sensor/**,/mobile/**,/page/**,/swagger*/**,/v2/**,/webjars/**,/demo/**,/weixin/alarm-show
 specialOrgIds=5
\ No newline at end of file

--
Gitblit v1.8.0