package com.gyee.frame.util;



import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;


import com.gyee.frame.model.auto.WindPowerStationTestingPoint;
import com.gyee.frame.model.auto.WindTurbineTestingPointAi;
import com.gyee.frame.model.custom.DNAStatVal;
import com.gyee.frame.model.custom.DNAVal;
import com.gyee.frame.model.custom.PointData;
import com.gyee.frame.util.golden.StringUtil;
import com.gyee.frame.util.golden.timeseries.ErrorRequest;
import com.gyee.frame.util.golden.timeseries.JsonObjectHelper;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.RestTemplate;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.*;

/**
 */
@Component
public class MongoEdosUtil implements IRealTimeDataBaseUtil {

    private RestTemplate restTemplate =new RestTemplate();
    private static String baseURL = "http://192.168.2.216:8090/mogodb";
    @Override
    public PointData getRealData(WindPowerStationTestingPoint point) throws Exception {
        try {
            Optional<String> keys = Optional.ofNullable(point.getCode());


            String url = baseURL + "/getRealData.action?";
            if (keys.isPresent())
                url = url + "point=" + keys.get();
            String s = HttpClientUtil.doGet(url);
            JSONObject jsonObject=JSONObject.parseObject(s);
            PointData pointData = JSONObject.toJavaObject(jsonObject, PointData.class);
            return pointData;
        } catch (HttpClientErrorException exception) {
            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                System.out.println("404请求错误");
                return ErrorRequest.RequestError(point.getCode());
            } else {
                throw exception;
            }
        }
    }




    @Override
    public List<PointData> getHistoryDatasSnap(WindPowerStationTestingPoint point, Long beginDate, Long endDate, Long count, Long pried) throws Exception {
        Optional<String> tagName = Optional.ofNullable(point.getCode());
        Optional<String> thingId = Optional.ofNullable(point.getWindpowerstationid());
        Optional<String> thingType = Optional.ofNullable(point.getModelid());
        Optional<String> uniformCode = Optional.ofNullable(point.getUniformcode());
        Optional<Long> startTs = Optional.ofNullable(beginDate);
        Optional<Long> endTs = Optional.ofNullable(endDate);
        Optional<Long> counts = Optional.ofNullable(count);
        Optional<Long> prieds = Optional.ofNullable(pried);
        //通过时间区间和时间间隔获取点数


        try {
            String url = baseURL + "/getHistoryDatasSnap.action?";
            //tagName 或thingType，thingId，uniformCode可以确定一个标签点
            if (tagName.isPresent())
                url = url + "point=" + tagName.get();
            if (startTs.isPresent())
                url = url + "&begin=" + startTs.get();
            if (endTs.isPresent())
                url = url + "&end=" + endTs.get();
            if (counts.isPresent())
                url = url + "&count=" + counts.get();
            if (prieds.isPresent())
                url = url + "&pried=" + prieds.get();
            String s = HttpClientUtil.doGet(url);
            List<PointData> pointDatas = JSONArray.parseArray(s, PointData.class);

            return pointDatas;




        } catch (HttpClientErrorException exception) {
            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                System.out.println("404请求错误");
                return ErrorRequest.RequestListError(point.getCode());
            } else {
                throw exception;
            }
        }

    }





    @Override
    public List<PointData> getHistoryDatasRaw(WindPowerStationTestingPoint point, Long beginDate, Long endDate) throws Exception {
        Optional<String> tagName = Optional.ofNullable(point.getCode());
        Optional<String> thingId = Optional.ofNullable(point.getWindpowerstationid());
        Optional<String> thingType = Optional.ofNullable(point.getModelid());
        Optional<String> uniformCode = Optional.ofNullable(point.getUniformcode());
        Optional<Long> startTs = Optional.ofNullable(beginDate);
        Optional<Long> endTs = Optional.ofNullable(endDate);

        try {
            String url = baseURL + "/getHistoryDatasRaw.action?";
            //tagName 或thingType，thingId，uniformCode可以确定一个标签点
            if (tagName.isPresent())
                url = url + "point=" + tagName.get();


            if (startTs.isPresent())
                url = url + "&begin=" + startTs.get();
            if (endTs.isPresent())
                url = url + "&end=" + endTs.get();

            String s = HttpClientUtil.doGet(url);
            List<PointData> pointDatas = JSONArray.parseArray(s, PointData.class);
           return pointDatas;

        } catch (HttpClientErrorException exception) {
            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                System.out.println("404请求错误");
                return ErrorRequest.RequestListError(point.getCode());
            } else {
                throw exception;
            }
        }
    }

    @Override
    public PointData getRealData(WindTurbineTestingPointAi point) throws Exception {
        Optional<String> keys = Optional.ofNullable(point.getId());
        Optional<String> thingType = Optional.ofNullable(point.getModelid());
        Optional<String> thingId = Optional.ofNullable(point.getWindpowerstationid());
        Optional<String> uniformCodes = Optional.ofNullable(point.getUniformcode());

        try {
            String url = baseURL + "/getRealData.action?";
            //tagName 或thingType，thingId，uniformCode可以确定一个标签点
            if (keys.isPresent())
                url = url + "point=" + keys.get();

            String s = HttpClientUtil.doGet(url);
            JSONObject jsonObject=JSONObject.parseObject(s);
            PointData pointData = JSONObject.toJavaObject(jsonObject, PointData.class);
            return pointData;

        } catch (HttpClientErrorException exception) {
            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                System.out.println("404请求错误");
                return ErrorRequest.RequestError(point.getId());
            } else {
                throw exception;
            }
        }
    }

    @Override
    public List<PointData> getHistoryDatasSnap(WindTurbineTestingPointAi point, Long beginDate, Long endDate, Long count, Long pried) throws Exception {

        Optional<String> tagName = Optional.ofNullable(point.getId());
        Optional<String> thingId = Optional.ofNullable(point.getWindpowerstationid());
        Optional<String> thingType = Optional.ofNullable(point.getModelid());
        Optional<String> uniformCode = Optional.ofNullable(point.getUniformcode());
        Optional<Long> startTs = Optional.ofNullable(beginDate);
        Optional<Long> endTs = Optional.ofNullable(endDate);
        Optional<Long> counts = Optional.ofNullable(count);
        Optional<Long> prieds = Optional.ofNullable(pried);
        //通过时间区间和时间间隔获取点数

        try {
            String url = baseURL + "/getHistoryDatasSnap.action?";
            //tagName 或thingType，thingId，uniformCode可以确定一个标签点
            if (tagName.isPresent())
                url = url + "point=" + tagName.get();

            if (startTs.isPresent())
                url = url + "&begin=" + startTs.get();
            if (endTs.isPresent())
                url = url + "&end=" + endTs.get();
            if (counts.isPresent())
                url = url + "&count=" + counts.get();
            if (prieds.isPresent())
                url = url + "&pried=" + prieds.get();

            String s = HttpClientUtil.doGet(url);
            List<PointData> pointDatas = JSONArray.parseArray(s, PointData.class);
            return pointDatas;
        } catch (HttpClientErrorException exception) {
            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                System.out.println("404请求错误");
                return ErrorRequest.RequestListError(point.getId());
            } else {
                throw exception;
            }
        }
    }


    @Override
    public List<PointData> getHistoryDatasRaw(WindTurbineTestingPointAi point, Long beginDate, Long endDate) throws Exception {
        Optional<String> tagName = Optional.ofNullable(point.getId());
        Optional<String> thingId = Optional.ofNullable(point.getWindpowerstationid());
        Optional<String> thingType = Optional.ofNullable(point.getModelid());
        Optional<String> uniformCode = Optional.ofNullable(point.getUniformcode());
        Optional<Long> startTs = Optional.ofNullable(beginDate);
        Optional<Long> endTs = Optional.ofNullable(endDate);
        try {
            String url = baseURL + "/getHistoryDatasRaw.action?";
            //tagName 或thingType，thingId，uniformCode可以确定一个标签点
            if (tagName.isPresent())
                url = url + "point=" + tagName.get();
            if (startTs.isPresent())
                url = url + "&begin=" + startTs.get();
            if (endTs.isPresent())
                url = url + "&end=" + endTs.get();

            String s = HttpClientUtil.doGet(url);
            List<PointData> pointDatas = JSONArray.parseArray(s, PointData.class);
            return pointDatas;
        } catch (HttpClientErrorException exception) {
            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                System.out.println("404请求错误");
                return ErrorRequest.RequestListError(point.getId());
            } else {
                throw exception;
            }
        }
    }

    @Override
    public PointData getRealData(String pointid) throws Exception {
        Optional<String> keys = Optional.ofNullable(pointid);
        String url = baseURL + "/getRealData.action?";
        try {
            if (keys.isPresent())
                url = url + "point=" + keys.get();
            else
                return null;

            String s = HttpClientUtil.doGet(url);
            JSONObject jsonObject=JSONObject.parseObject(s);
            PointData pointData = JSONObject.toJavaObject(jsonObject, PointData.class);
            return pointData;

        } catch (HttpClientErrorException exception) {
            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                System.out.println("404请求错误");
                return ErrorRequest.RequestError(pointid);
            } else {
                return ErrorRequest.RequestError(pointid);
            }
        }
    }

    @Override
    public List<PointData> getRealData(String... pointids) throws Exception {
        String pointIdString = StringUtil.join(pointids, ",");
        Optional<String> keys = Optional.ofNullable(pointIdString);
        String url = baseURL + "/getRealData.action?1=1";
        try {
            if (keys.isPresent())
                url = url + "&point=" + keys.get();
            else {
                return ErrorRequest.RequestListError(pointids);
            }
            String s = HttpClientUtil.doGet(url);
            List<PointData> pointDatas = JSONArray.parseArray(s, PointData.class);
            return pointDatas;



        } catch (HttpClientErrorException exception) {
            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                System.out.println("404请求错误");
                return ErrorRequest.RequestListError(pointids);
            } else {
                throw exception;
            }
        }
    }



    @Override
    public List<PointData> getRealData(List<String> pointids) throws Exception {
        String pointIdString = StringUtil.join(pointids.toArray(), ",");
        Optional<String> keys = Optional.ofNullable(pointIdString);
        String url = baseURL + "/getRealData.action?";
        try {
            if (keys.isPresent())
                url = url + "keys=" + keys.get();
            else {
                String[] arr = new String[pointids.size()];
                return ErrorRequest.RequestListError(pointids.toArray(arr));
            }
            String s = HttpClientUtil.doGet(url);
            List<PointData> pointDatas = JSONArray.parseArray(s, PointData.class);
            return pointDatas;

        } catch (HttpClientErrorException exception) {
            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                System.out.println("404请求错误");
                String[] arr = new String[pointids.size()];
                return ErrorRequest.RequestListError(pointids.toArray(arr));
            } else {
                throw exception;
            }
        }
    }

    @Override
    public Map<String, Double> getRealDataMap(String... pointids) throws Exception {
        return null;
    }


	  @Override
	    public List<PointData> getHistoryDatasSnap(String pointid, Long beginDate, Long endDate, Long count, Long pried) throws Exception {
	        Optional<String> tagName = Optional.ofNullable(pointid);
	        Optional<Long> startTs = Optional.ofNullable(beginDate);
	        Optional<Long> endTs = Optional.ofNullable(endDate);
          Optional<Long> counts = Optional.ofNullable(count);
          Optional<Long> prieds = Optional.ofNullable(pried);


          try {
              String url = baseURL + "/getHistoryDatasSnap.action?";
              //tagName 或thingType，thingId，uniformCode可以确定一个标签点
              if (tagName.isPresent())
                  url = url + "point=" + tagName.get();

              if (startTs.isPresent())
                  url = url + "&begin=" + startTs.get();
              if (endTs.isPresent())
                  url = url + "&end=" + endTs.get();
              if (counts.isPresent())
                  url = url + "&count=" + counts.get();
              if (prieds.isPresent())
                  url = url + "&pried=" + prieds.get();


              String s = HttpClientUtil.doGet(url);
              List<PointData> pointDatas = JSONArray.parseArray(s, PointData.class);
              return pointDatas;


	        } catch (HttpClientErrorException exception) {
	            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
	                System.out.println("404请求错误");
	                return ErrorRequest.RequestListError(pointid);
	            } else {
	                throw exception;
	            }
	        }

	    }


    @Override
    public List<PointData> getHistoryDatasRaw(String pointid, Long beginDate, Long endDate) throws Exception {
        Optional<String> tagName = Optional.ofNullable(pointid);
        Optional<Long> startTs = Optional.ofNullable(beginDate * 1000);
        Optional<Long> endTs = Optional.ofNullable(endDate * 1000);

        try {
            String url = baseURL + "/history/raw?null=0";
            //tagName 或thingType，thingId，uniformCode可以确定一个标签点
            if (tagName.isPresent())
                url = url + "&tagName=" + tagName.get();
            if (startTs.isPresent())
                url = url + "&startTs=" + startTs.get();
            if (endTs.isPresent())
                url = url + "&endTs=" + endTs.get();

            ResponseEntity<JSONArray> resp = restTemplate.getForEntity(url, JSONArray.class);

            JSONArray jsonArray = resp.getBody();
            if (jsonArray != null)
                return JsonObjectHelper.phrasePointData(jsonArray, pointid);
            else {
                return ErrorRequest.RequestListError(pointid);
            }
        } catch (HttpClientErrorException exception) {
            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                System.out.println("404请求错误");
                return ErrorRequest.RequestListError(pointid);
            } else {
                throw exception;
            }
        }
    }

    @Override
    public List<PointData> getHistStat(WindTurbineTestingPointAi point, Long beginDate, Long endDate, Long count, Long pried, int type) throws Exception {
        Optional<String> tagName = Optional.ofNullable(point.getId());
        Optional<String> thingId = Optional.ofNullable(point.getWindpowerstationid());
        Optional<String> thingType = Optional.ofNullable(point.getModelid());
        Optional<String> uniformCode = Optional.ofNullable(point.getUniformcode());
        Optional<Long> startTs = Optional.ofNullable(beginDate);
        Optional<Long> endTs = Optional.ofNullable(endDate);
        Optional<Long> counts = Optional.ofNullable(count);
        Optional<Long> prieds = Optional.ofNullable(pried);
        Optional<Integer> types = Optional.ofNullable(type);


        try {
            String url = baseURL + "/getHistStat.action?";
            //tagName 或thingType，thingId，uniformCode可以确定一个标签点
            if (tagName.isPresent())
                url = url + "point=" + tagName.get();
            if (startTs.isPresent())
                url = url + "&begin=" + startTs.get();
            if (endTs.isPresent())
                url = url + "&end=" + endTs.get();
            if (counts.isPresent())
                url = url + "&count=" + counts.get();
            if (prieds.isPresent())
                url = url + "&pried=" + prieds.get();
            if (types.isPresent())
                url = url + "&type=" + types.get();

            String s = HttpClientUtil.doGet(url);
            List<PointData> pointDatas = JSONArray.parseArray(s, PointData.class);
            return pointDatas;
        } catch (HttpClientErrorException exception) {
            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                System.out.println("404请求错误");
                return ErrorRequest.RequestListError(point.getId());
            } else {
                throw exception;
            }
        }
    }

    @Override
    public List<PointData> getHistStat(WindPowerStationTestingPoint point, Long beginDate, Long endDate, Long count, Long pried, int type) throws Exception {
        Optional<String> tagName = Optional.ofNullable(point.getCode());
        Optional<String> thingId = Optional.ofNullable(point.getWindpowerstationid());
        Optional<String> thingType = Optional.ofNullable(point.getModelid());
        Optional<String> uniformCode = Optional.ofNullable(point.getUniformcode());
        Optional<Long> startTs = Optional.ofNullable(beginDate * 1000);
        Optional<Long> endTs = Optional.ofNullable(endDate * 1000);
        Optional<Long> counts = Optional.ofNullable(count);
        Optional<Long> prieds = Optional.ofNullable(pried);
        Optional<Integer> types = Optional.ofNullable(type);


        try {
            String url = baseURL + "/getHistStat.action?";
            //tagName 或thingType，thingId，uniformCode可以确定一个标签点
            if (tagName.isPresent())
                url = url + "point=" + tagName.get();

            if (startTs.isPresent())
                url = url + "&begin=" + startTs.get();
            if (endTs.isPresent())
                url = url + "&end=" + endTs.get();
            if (counts.isPresent())
                url = url + "&count=" + counts.get();
            if (prieds.isPresent())
                url = url + "&pried=" + prieds.get();
            if (types.isPresent())
                url = url + "&type=" + types.get();

            String s = HttpClientUtil.doGet(url);
            List<PointData> pointDatas = JSONArray.parseArray(s, PointData.class);
            return pointDatas;
        } catch (HttpClientErrorException exception) {
            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                System.out.println("404请求错误");
                return ErrorRequest.RequestListError(point.getCode());
            } else {
                throw exception;
            }
        }
    }

    @Override
    public List<PointData> getHistStat(String pointid, Long beginDate, Long endDate, Long count, Long pried, int type) throws Exception {
        Optional<String> tagName = Optional.ofNullable(pointid);
        Optional<Long> startTs = Optional.ofNullable(beginDate * 1000);
        Optional<Long> endTs = Optional.ofNullable(endDate * 1000);
        Optional<Long> counts = Optional.ofNullable(count);
        Optional<Long> prieds = Optional.ofNullable(pried);
        Optional<Integer> types = Optional.ofNullable(type);


        try {
            String url = baseURL + "/getHistStat.action?";
            //tagName 或thingType，thingId，uniformCode可以确定一个标签点
            if (tagName.isPresent())
                url = url + "point=" + tagName.get();

            if (startTs.isPresent())
                url = url + "&begin=" + startTs.get();
            if (endTs.isPresent())
                url = url + "&end=" + endTs.get();
            if (counts.isPresent())
                url = url + "&count=" + counts.get();
            if (prieds.isPresent())
                url = url + "&pried=" + prieds.get();
            if (types.isPresent())
                url = url + "&type=" + types.get();

            String s = HttpClientUtil.doGet(url);
            List<PointData> pointDatas = JSONArray.parseArray(s, PointData.class);
            return pointDatas;
        } catch (HttpClientErrorException exception) {
            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                System.out.println("404请求错误");
                return ErrorRequest.RequestListError(pointid);
            } else {
                throw exception;
            }
        }
    }

    @Override
    public DNAStatVal[] getHistStat(String point, Long beginDate, Long endDate, Integer pried) throws Exception {
        Optional<String> tagName = Optional.ofNullable(point);
        Optional<Long> startTs = Optional.ofNullable(beginDate * 1000);
        Optional<Long> endTs = Optional.ofNullable(endDate * 1000);
        //通过时间区间和时间间隔获取点数
        Optional<Integer> interval = Optional.ofNullable(pried);

        try {
            String url = baseURL + "/history/stat?null=0";
            //tagName 或thingType，thingId，uniformCode可以确定一个标签点
            if (tagName.isPresent())
                url = url + "&tagName=" + tagName.get();
            if (startTs.isPresent())
                url = url + "&startTs=" + startTs.get();
            if (endTs.isPresent())
                url = url + "&endTs=" + endTs.get();
            if (interval.isPresent())
                url = url + "&interval=" + interval.get();

            //System.out.println(restTemplate.getForEntity(url, JSONArray.class));
            ResponseEntity<JSONArray> resp = restTemplate.getForEntity(url, JSONArray.class);
            if (resp != null) {
                JSONArray jsonArray = resp.getBody();
                if (jsonArray == null || jsonArray.size() <= 0) {
                    DNAStatVal[] dnaVal = new DNAStatVal[1];
                    DNAVal errorData = new DNAVal();
                    errorData.Status = 0;

                    DNAStatVal val = new DNAStatVal();
                    val.avg = errorData;
                    val.max = errorData;
                    val.min = errorData;
                    dnaVal[0] = val;
                    return dnaVal;
                } else {
                    return JsonObjectHelper.phraseDNAVal(jsonArray);
                }
            } else {
                return null;
            }

        } catch (HttpClientErrorException exception) {
            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                System.out.println("404请求错误");
                DNAStatVal val = new DNAStatVal();
                DNAStatVal[] dnaVal = new DNAStatVal[1];
                DNAVal errorData = new DNAVal();
                errorData.Status = 0;
                val.avg = errorData;
                val.max = errorData;
                val.min = errorData;
                dnaVal[0] = val;
                return dnaVal;

            } else {
                DNAStatVal val = new DNAStatVal();
                DNAStatVal[] dnaVal = new DNAStatVal[1];
                DNAVal errorData = new DNAVal();
                errorData.Status = 0;
                val.avg = errorData;
                val.max = errorData;
                val.min = errorData;
                dnaVal[0] = val;
                return dnaVal;
            }
        }
    }

    private JSONObject convertPointData(PointData pd) {
        JSONObject jo = new JSONObject();
        jo.put("tagName", pd.getEdnaId());
        JSONObject joo = new JSONObject();
        joo.put("ts", pd.getPointTime()*1000);
        joo.put("status", 0);
        joo.put("doubleValue", pd.getPointValueInDouble());
        jo.put("tsData", joo);
        return jo;
    }

    @Override
    public void updatePoint(PointData point) throws Exception {
        String url = baseURL + "/history";
        try {
            String result = restTemplate.postForObject(url, convertPointData(point), String.class);
        } catch (HttpClientErrorException exception) {
            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                return;
            } else {
                throw exception;
            }
        }
    }

    @Override
    public DNAVal[] getRealtimeTagValues(String... tagNames) throws Exception {
        String pointIdString = StringUtil.join(tagNames, ",");
        Optional<String> keys = Optional.ofNullable(pointIdString);
        String url = baseURL + "/latest?null=0";
        try {
            if (keys.isPresent())
                url = url + "&keys=" + keys.get();
            else
                return null;

            ResponseEntity<JSONObject> resp = restTemplate.getForEntity(url, JSONObject.class);
            JSONObject jsonObject = resp.getBody();
            if (StringUtils.isNotEmpty(jsonObject) && !jsonObject.isEmpty()){
                return JsonObjectHelper.phraseDNAVal(jsonObject,tagNames);
            } else {
            	  DNAVal[] errorResult = new DNAVal[tagNames.length];
                  for(int i=0;i<tagNames.length;i++)
                  {
                  	 DNAVal val = new DNAVal();
                       val.Status = 0;
                       errorResult[i] = val;
                  }
                  return errorResult;
            }

        } catch (HttpClientErrorException exception) {
            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                System.out.println("404请求错误");
                DNAVal[] errorResult = new DNAVal[tagNames.length];
                for(int i=0;i<tagNames.length;i++)
                {
                	 DNAVal val = new DNAVal();
                     val.Status = 0;
                     errorResult[i] = val;
                }
                return errorResult;
            } else {
                throw exception;
            }
        }
    }

    @Override
    public void updatePoint(List<PointData> pointls) throws Exception {
        String url = baseURL + "/history/batch";
        List<JSONObject> writeList = new ArrayList<>();

        for (PointData entity : pointls) {
            writeList.add(convertPointData(entity));
        }
        try {
            String result = restTemplate.postForObject(url, writeList, String.class);
        } catch (HttpClientErrorException exception) {
            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                return;
            } else {
                throw exception;
            }
        }
    }

    @Override
    public void sendSinglePoint(PointData point) throws Exception {
        String url = baseURL + "/latest";


        try {
            String result = restTemplate.postForObject(url, convertPointData(point), String.class);
        } catch (HttpClientErrorException exception) {
            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                return;
            } else {
                throw exception;
            }
        }
    }

    @Override
    public void sendMultiPoint(List<PointData> pointls) throws Exception {

        String url = baseURL + "/latest/batch";
        List<JSONObject> writeList = new ArrayList<>();

        for (PointData entity : pointls) {
            writeList.add(convertPointData(entity));
        }
        try {
            String result = restTemplate.postForObject(url, writeList, String.class);
        } catch (HttpClientErrorException exception) {
            if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                System.out.println("404请求错误");
            } else {
                throw exception;
            }
        }
    }

    @Override
    public void sendMultiPoint(String[] realvalue, DNAVal[] pointls) throws Exception {
        String url = baseURL + "/latest/batch";

        List<JSONObject> writeDataList = new ArrayList<>();
        if (realvalue != null && pointls != null & realvalue.length == pointls.length) {
            for (int i = 0; i < realvalue.length; i++) {
                PointData writeData = new PointData();
                writeData.setEdnaId(realvalue[i]);
                writeData.setPointValueInDouble(pointls[i].DValue);
                writeData.setPointTime((long)pointls[i].Time);
                JSONObject jsonObject=convertPointData(writeData);
                writeDataList.add(jsonObject);
            }

            try {
                String result = restTemplate.postForObject(url, writeDataList, String.class);
            } catch (HttpClientErrorException exception) {
                if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
                    System.out.println("404请求错误");
                } else {
                    throw exception;
                }
            }
        } else
            return;
    }

    //多点切面数据
    @Override
    public DNAVal[] getHistMatrix(String[] nameList, long tTime) throws Exception {
        String tagNameString = StringUtil.join(nameList, ",");
        Long time = Long.valueOf(tTime);
        Optional<String> tagName = Optional.ofNullable(tagNameString);
        Optional<Long> ts = Optional.ofNullable(time * 1000);
        String url = baseURL + "/history/section?tagNames=" + tagName.get() + "&ts=" + ts.get();
        try {
            ResponseEntity<JSONObject> resp = restTemplate.getForEntity(url, JSONObject.class);
            JSONObject jsonObject = resp.getBody();
            if (StringUtils.isNotEmpty(jsonObject) && !jsonObject.isEmpty())
            {
            	 return JsonObjectHelper.phraseDNAVal(jsonObject,nameList);
            }
            else {
                DNAVal[] errorResult = new DNAVal[nameList.length];
                for(int i=0;i<nameList.length;i++)
                {
                	 DNAVal val = new DNAVal();
                     val.Status = 0;
                     errorResult[i] = val;
                }
                return errorResult;
            }
        } catch (Exception e) {
        	  DNAVal[] errorResult = new DNAVal[nameList.length];
              for(int i=0;i<nameList.length;i++)
              {
              	 DNAVal val = new DNAVal();
                   val.Status = 0;
                   errorResult[i] = val;
              }
              return errorResult;
        }
    }


}
