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