xufenglei
2019-03-13 f9640a02ea2abd1369c179f3ec88a7f9d91dea62
排放超标比例 报表
10 files modified
237 ■■■■■ changed files
src/main/java/com/moral/controller/ReportController.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/controller/ScreenController.java 118 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/DeviceMapper.java 1 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/mapper/HistoryDailyMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/DeviceService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/HistoryDailyService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/DeviceServiceImpl.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/com/moral/service/impl/HistoryDailyServiceImpl.java 30 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/DeviceMapper.xml 4 ●●●● patch | view | raw | blame | history
src/main/resources/mapper/HistoryDailyMapper.xml 61 ●●●●● patch | view | raw | blame | history
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);
    }
}
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);
    }
}
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);
}
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);
}
src/main/java/com/moral/service/DeviceService.java
@@ -56,4 +56,6 @@
    void saveOrUpdate4Mobile(Device device, DeviceProperty deviceProperty);
    String getLimitDataByDevice(Map<String, Object> parameters);
}
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;
}
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);
    }
}
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;
    }
}
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>
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>