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 < #{end}
+ </if>
+ <if test="regionCode != null">
+ AND mp.${regionType}_code = #{regionCode}
+ </if>
+ <if test="orgIds != null and orgIds.size > 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