cjl
2023-09-26 58150fda03d0e2664cfd7cc621c03315a286fb67
screen-api/src/main/java/com/moral/api/controller/ChartController.java
@@ -1,21 +1,29 @@
package com.moral.api.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.moral.api.entity.Organization;
import com.moral.api.entity.ServicesScope;
import com.moral.api.mapper.OrganizationMapper;
import com.moral.api.service.HistoryDailyService;
import com.moral.api.service.HistoryHourlyService;
import com.moral.api.service.HistoryMonthlyService;
import com.moral.api.service.ServicesScopeService;
import com.moral.constant.Constants;
import com.moral.constant.ResponseCodeEnum;
import com.moral.constant.ResultMessage;
import com.moral.util.DateUtils;
import com.moral.util.WebUtils;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.system.ApplicationHome;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@@ -44,6 +52,9 @@
    @Resource
    private HistoryMonthlyService historyMonthlyService;
    @Resource
    private ServicesScopeService servicesScopeService;
    @RequestMapping(value = "getThermodynamicDiagramDataByCondition", method = RequestMethod.GET)
    @ResponseBody
@@ -135,95 +146,268 @@
        return ResultMessage.ok(resultMap);
    }
    @RequestMapping(value = "getThermodynamicDiagramDataByConditionV2", method = RequestMethod.GET)
    @ResponseBody
    public ResultMessage getThermodynamicDiagramDataByConditionV2(HttpServletRequest request) throws ParseException {
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request,null);
        Object servicesScopeId = parameters.get("servicesScopeId");
        Object sensorCode = parameters.get("sensor_code");
        Object type = parameters.get("type");
        if (ObjectUtils.isEmpty(servicesScopeId) || ObjectUtils.isEmpty(sensorCode) || ObjectUtils.isEmpty(type)){
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        }
        QueryWrapper<ServicesScope> servicesScopeQueryWrapper = new QueryWrapper<>();
        servicesScopeQueryWrapper.eq("is_delete",Constants.NOT_DELETE);
        servicesScopeQueryWrapper.eq("id",servicesScopeId);
        ServicesScope servicesScope = servicesScopeService.getOne(servicesScopeQueryWrapper);
        if (ObjectUtils.isEmpty(servicesScope)){
            return ResultMessage.fail(ResponseCodeEnum.ORGANIZATION_NOT_EXIST.getCode(), ResponseCodeEnum.ORGANIZATION_NOT_EXIST.getMsg());
        }
        Map<String, Object> resultMap = new HashMap<>();
        List<Map<String,Object>> resultList = new ArrayList<>();
        if (type.equals("hourly")){
            Object time = parameters.get("time");
            if (ObjectUtils.isEmpty(time)){
                return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
            }
            resultMap = historyHourlyService.getThermodynamicDiagramDataByOrgIdSensorCodeTimeV2(parameters);
            return ResultMessage.ok(resultMap);
        }
        if (type.equals("daily")){
            Object time = parameters.get("time");
            if (ObjectUtils.isEmpty(time)){
                return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
            }
            resultMap = historyDailyService.getThermodynamicDiagramDataByOrgIdSensorCodeTimeV2(parameters);
            return ResultMessage.ok(resultMap);
        }
        if (type.equals("monthly")){
            Object time = parameters.get("time");
            if (ObjectUtils.isEmpty(time)){
                return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
            }
            resultMap = historyMonthlyService.getThermodynamicDiagramDataByOrgIdSensorCodeTimeV2(parameters);
            return ResultMessage.ok(resultMap);
        }
        if (type.equals("custom")){
            String startTime = parameters.get("startTime").toString();
            String endTime = parameters.get("endTime").toString();
            if (ObjectUtils.isEmpty(startTime) || ObjectUtils.isEmpty(endTime)){
                return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
            }
            if (startTime.length() == 13){
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//24小时制
                long newTime1 = simpleDateFormat.parse(startTime+":00:00").getTime();
                long newTime2 = simpleDateFormat.parse(endTime+":00:00").getTime();
                Long result = newTime2 - newTime1; //获取两时间相差的毫秒数
                long nd = 1000 * 24 * 60 * 60;
                long nh = 1000 * 60 * 60;
                long nm = 1000 * 60;
                long hour = result / nh; //获取相差的小时数
                if (hour+1>12){
                    return ResultMessage.fail(-1, "时间不能超过12小时");
                }
                if (hour<0){
                    return ResultMessage.fail(ResponseCodeEnum.TIME_FORMAT_INVALID.getCode(), ResponseCodeEnum.TIME_FORMAT_INVALID.getMsg());
                }
                parameters.put("hour",hour);
                resultList = historyHourlyService.getThermodynamicDiagramDataByOrgIdSensorCodeTimeslotV2(parameters);
                return ResultMessage.ok(resultList);
            }
            if (startTime.length() == 10){
                long days = DateUtils.getQuotByDays(startTime, endTime);
                if (days+1>12){
                    return ResultMessage.fail(-1, "时间不能超过12天");
                }
                parameters.put("days",days);
                resultList = historyDailyService.getThermodynamicDiagramDataByOrgIdSensorCodeTimeSlotV2(parameters);
                return ResultMessage.ok(resultList);
            }
            if (startTime.length() == 7){
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM");
                Date satrtTimeDate = df.parse(startTime);
                Date endTimeDate = df.parse(endTime);
                long months = DateUtils.getMonth(satrtTimeDate,endTimeDate); //获取相差的小时数
                if (months+1>12){
                    return ResultMessage.fail(-1, "时间不能超过12月");
                }
                parameters.put("months",months);
                resultList = historyMonthlyService.getThermodynamicDiagramDataByOrgIdSensorCodeTimeSlotV2(parameters);
                return ResultMessage.ok(resultList);
            }
        }
        return ResultMessage.ok(resultMap);
    }
    @GetMapping("honeycombDiagram")
    public ResultMessage honeycombDiagram (HttpServletRequest httpServletRequest, HttpServletResponse response) throws IOException {
        Map<String, Object> params = WebUtils.getParametersStartingWith(httpServletRequest, null);
        Object serviceScopeId = params.get("serviceScopeId");
        Object sensor_code = params.get("sensor_code");
        Object type = params.get("type");
        Object time = params.get("time");
        Object distance = params.get("distance");
        if (ObjectUtils.isEmpty(serviceScopeId)){
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        }
        List<Map<String, Object>> resultList = servicesScopeService.honeycombDiagram(Integer.parseInt(serviceScopeId.toString()), Integer.parseInt(distance.toString()), type.toString(), time.toString(), sensor_code.toString());
        //List<Map<String, Object>> resultList = servicesScopeService.honeycombDiagram(6, 40, "monthly", "2022-02", "a34004");
        //获取jar包所在目录
        ApplicationHome applicationHome = new ApplicationHome(getClass());
        //在jar包所在目录下生成一个upload文件夹用来存储上传的图片
        String path = applicationHome.getSource().getParentFile().toString() + "/static/tsv";
        //File file = File.createTempFile("test",".tsv");
        /*if (!new File(path).exists()){
            new File(path).mkdir();
        }*/
        File file = null;
        File dir = new File(path);
        file = File.createTempFile("honeycombDiagram",".tsv",dir);
        //构建输出流,同时指定编码
        OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream(file),"UTF-8");
        //tsv文件是空格分隔,除第一个外,每次写入一个单元格数据后需要输入空格
        ow.write("lng");
        ow.write("  ");
        ow.write("lat");
        ow.write("  ");
        ow.write("count");
        //写完文件头换行
        ow.write("\r\n");
        //写内容
        for (Map map:resultList) {
            ow.write(map.get("lon").toString());
            ow.write("  ");
            ow.write(map.get("lat").toString());
            ow.write("  ");
            ow.write(map.get("value").toString());
            //写完一行换行
            ow.write("\r\n");
        }
        ow.flush();
        ow.close();
        /*String localAddr = httpServletRequest.getLocalAddr();
        int serverPort = httpServletRequest.getServerPort();*/
        Map<String,Object> res = new HashMap<>();
        res.put("path","http://47.99.64.149:8081"+"/static/tsv/"+file.getName());
        return ResultMessage.ok(res);
    }
    @RequestMapping(value = "returnDataTest", method = RequestMethod.GET)
    @ResponseBody
    public ResultMessage returnDataTest(HttpServletRequest request) throws ParseException {
        List bigList = new ArrayList();
        Map<String,Object> resultMap = new HashMap<>();
        List<List> boundList = new ArrayList<>();
        /*boundList.add(120.70980239181193);
        boundList.add(31.329143000000002);
        boundList.add(120.74077860818807);
        boundList.add(31.356963);*/
        /*List<Double> boundList1 = new ArrayList<>();
        List<Double> boundList2 = new ArrayList<>();
        List<Double> boundList3 = new ArrayList<>();
        List<Double> boundList4 = new ArrayList<>();
        List<Double> boundList5 = new ArrayList<>();
        List<Double> boundList6 = new ArrayList<>();
        List<Double> boundList7 = new ArrayList<>();
        List<Double> boundList8 = new ArrayList<>();
        List<Double> boundList9 = new ArrayList<>();
        boundList1.add(120.975221);
        boundList1.add(31.413145);
        boundList2.add(120.977021);
        boundList2.add(31.411345);
        boundList3.add(120.979174);
        boundList3.add(31.333362);
        boundList4.add(120.977374);
        boundList4.add(31.331562);
        boundList5.add(120.913768);
        boundList5.add(31.347918);
        boundList6.add(120.870665);
        boundList6.add(31.341063);
        boundList7.add(120.868865);
        boundList7.add(31.342863);
        boundList8.add(120.896371);
        boundList8.add(31.409264);
        boundList9.add(120.898171);
        boundList9.add(31.411064);
        List<List> boundList_middle = new ArrayList<>();
        boundList_middle.add(boundList1);
        boundList_middle.add(boundList2);
        boundList_middle.add(boundList3);
        boundList_middle.add(boundList4);
        boundList_middle.add(boundList5);
        boundList_middle.add(boundList6);
        boundList_middle.add(boundList7);
        boundList_middle.add(boundList8);
        boundList_middle.add(boundList9);*/
        String boundList_middle = "[[[120.975221,31.413145],[120.977021,31.411345],[120.979174,31.333362],[120.977374,31.331562],[120.913768,31.347918],[120.870665,31.341063],[120.868865,31.342863],[120.896371,31.409264],[120.898171,31.411064]]]";
        List<String> boundList_middle2 = new ArrayList<>();
        boundList_middle2.add(boundList_middle);
        resultMap.put("bound",boundList_middle);
        resultMap.put("time","2021-12-10 08:00:00");
        List<Double> centerPointList = new ArrayList<>();
        centerPointList.add(120.934824838);
        centerPointList.add(31.37834580);
        resultMap.put("centerPoint",centerPointList);
        List<Double> list1 = new ArrayList<>();
        list1.add(120.975221);
        list1.add(31.411345);
        list1.add(1.0);
        List<Double> list2 = new ArrayList<>();
        list2.add(120.870665);
        list2.add(31.342863);
        list2.add(4.0);
        List<Double> list3 = new ArrayList<>();
        list3.add(120.898171);
        list3.add(31.409264);
        list3.add(2.0);
        List<Double> list4 = new ArrayList<>();
        list4.add(120.913768);
        list4.add(31.349718);
        list4.add(3.0);
        List<Double> list5 = new ArrayList<>();
        list5.add(120.977374);
        list5.add(31.333362);
        list5.add(2.0);
        List list12345 = new ArrayList();
        list12345.add(list1);
        list12345.add(list2);
        list12345.add(list3);
        list12345.add(list4);
        list12345.add(list5);
        resultMap.put("list",list12345);
        for (int i=0;i<10;i++){
            resultMap.put("time","2021-12-10 0"+i+":00:00");
            bigList.add(resultMap);
        }
    public ResultMessage returnDataTest(HttpServletRequest request, HttpServletResponse response) throws ParseException, IOException {
        Map<String, Object> params = WebUtils.getParametersStartingWith(request, null);
        Object serviceScopeId = params.get("serviceScopeId");
        Object sensor_code = params.get("sensor_code");
        Object type = params.get("type");
        Object time = params.get("time");
        Object distance = params.get("distance");
        /*if (ObjectUtils.isEmpty(serviceScopeId)){
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        }*/
        List<Map<String, Object>> resultList = servicesScopeService.honeycombDiagram(Integer.parseInt(serviceScopeId.toString()), Integer.parseInt(distance.toString()), type.toString(), time.toString(), sensor_code.toString());
        //List<Map<String, Object>> resultList = servicesScopeService.honeycombDiagram(6, 40, "monthly", "2022-02", "a34004");
        return ResultMessage.ok(bigList);
        //获取jar包所在目录
        ApplicationHome applicationHome = new ApplicationHome(getClass());
        //在jar包所在目录下生成一个upload文件夹用来存储上传的图片
        String path = applicationHome.getSource().getParentFile().toString() + "/static/tsv";
        //File file = File.createTempFile("test",".tsv");
        if (!new File(path).exists()){
            new File(path).mkdir();
        }
        File file = null;
        File dir = new File(path);
        file = File.createTempFile("honeycombDiagram",".tsv",dir);
        //构建输出流,同时指定编码
        OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream(file),"UTF-8");
        //tsv文件是空格分隔,除第一个外,每次写入一个单元格数据后需要输入空格
        ow.write("lon");
        ow.write("  ");
        ow.write("lat");
        ow.write("  ");
        ow.write("value");
        //写完文件头换行
        ow.write("\r\n");
        //写内容
        for (Map map:resultList) {
            ow.write(map.get("lon").toString());
            ow.write("  ");
            ow.write(map.get("lat").toString());
            ow.write("  ");
            ow.write(map.get("value").toString());
            //写完一行换行
            ow.write("\r\n");
        }
        ow.flush();
        ow.close();
        /*File file1 = new File(file.getPath());
        InputStream inputStream = new FileInputStream(file1);
        OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
        byte[] bytes = new byte[1024];
        int len;
        while ((len = inputStream.read(bytes)) != -1){
            response.getOutputStream().write(bytes,0,len);
        }
        outputStream.flush();
        outputStream.close();
        inputStream.close();*/
        /*response.setCharacterEncoding("UTF-8");
        System.out.println(file.getName());
        String realFileName = file.getName();
        response.setHeader("content-type", "application/octet-stream;charset=UTF-8");
        response.addHeader("Content-Length",String.valueOf(file.length()));
        response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(realFileName.trim(), "UTF-8"));
        byte[] buff = new byte[1024];
        BufferedInputStream bis = null;
        OutputStream os = null;
        os = response.getOutputStream();
        bis = new BufferedInputStream(new FileInputStream(file));
        int i = bis.read(buff);
        while (i != -1) {
            os.write(buff, 0, buff.length);
            os.flush();
            i = bis.read(buff);
        }
        bis.close();*/
        /*//1、设置response 响应头
        response.reset(); //设置页面不缓存,清空buffer
        response.setCharacterEncoding("UTF-8"); //字符编码
        response.setContentType("multipart/form-data"); //二进制传输数据
        //设置响应头
        response.setHeader("Content-Disposition",
                "attachment;fileName="+ URLEncoder.encode(file.getName(), "UTF-8"));
        File file1 = new File(file.getParent(),file.getName());
        System.out.println(file1.getParent());
        //2、 读取文件--输入流
        InputStream input=new FileInputStream(file1);
        //3、 写出文件--输出流
        OutputStream out = response.getOutputStream();
        byte[] buff =new byte[1024];
        int index=0;
        //4、执行 写出操作
        while((index= input.read(buff))!= -1){
            out.write(buff, 0, index);
            out.flush();
        }
        out.close();
        input.close();*/
        Map<String,Object> res = new HashMap<>();
        res.put("path",file.getPath());
        return ResultMessage.ok(res);
    }
}