IThirdServiceImpl.java 12.8 KB
package com.jkdata.service.impl;

import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.jkdata.entity.HistoryPoint;
import com.jkdata.entity.SafeArea;
import com.jkdata.entity.SafeAreaNew;
import com.jkdata.tool.*;
import com.jkdata.entity.ThirdPosition;
import com.jkdata.mapper.ThirdMapper;
import com.jkdata.service.IThirdService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;

@Service
public class IThirdServiceImpl implements IThirdService {

    @Autowired
    private ThirdMapper thirdMapper;

    private static DecimalFormat df = new DecimalFormat("######0.0000");
    private static SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Autowired
    private RedisUtil redisUtil;

    @Override
    public void savePosition(JSONObject jsonObject) {
        Date t = new Date();
        boolean ok = addMsgLog(jsonObject,sf.format(t));//添加接收报文日志
        if(ok){
            ThirdPosition thirdPosition = new ThirdPosition();
            thirdPosition.setNodeId(jsonObject.getString("NodeId"));
            Map xyMap = jsonObject.getObject("position",Map.class);
            thirdPosition.setPositionx(xyMap.get("x").toString());
            thirdPosition.setPositiony(xyMap.get("y").toString());
            thirdPosition.setSystemId(jsonObject.getString("SystemId"));
            thirdPosition.setType(jsonObject.getString("Type"));
            thirdPosition.setGroup(jsonObject.getString("group"));
            thirdPosition.setGroupNumber(jsonObject.getInteger("groupNumber"));
            thirdPosition.setCreateTime(t);
            //判断是B1、B2
            changCoordinateB1(thirdPosition);
//            changCoordinateB2(thirdPosition);
        }


    }

    /**
     * 收报文日志
     * @param jsonObject
     */
    private boolean addMsgLog(JSONObject jsonObject, String format) {
        String sql = "INSERT INTO sys_msg_log  ( mag_log,create_by,create_time )  VALUES  " +
                "( '"+jsonObject.toJSONString()+"','"+CommonConstant.CMCC+"','"+format+"' )";
        System.out.println("**********"+sql);
        boolean ok = addDataToDataBase(sql);
        return ok;
    }

    //SQL插入数据库
    private boolean addDataToDataBase(String sql) {
        boolean ok = thirdMapper.addDataToDataBase(sql);
        return ok;
    }

    public static void main(String[] args) {
        String x1 = "22.99456";
        String y1 = "330.3669";
        Map<String,Double> map = new HashMap<>();//初始化
        map = CoordinateUtil.changCoordinate("B2",x1,y1);
        System.out.println("新坐标为:X:"+map.get("x")+",Y:"+map.get("y"));
//        double sin = Math.sin(CommonConstant.XZJD);
//        double cos = Math.cos(CommonConstant.XZJD);
//        System.out.println("sin:"+sin+",cos:"+cos);
//        //平移到原点
//        double x0 = Double.valueOf(x1) - CommonConstant.LT_B1_X;
//        double y0 = Double.valueOf(y1) - CommonConstant.LT_B1_Y;
//        System.out.println("平移后的坐标:x0:"+x0+",y0:"+y0);
//        //旋转坐标
//        double x = x0*sin + y0*cos;
//        double y = y0*sin - x0*cos;
//        System.out.println("旋转后坐标为:X:"+x+",Y:"+y);
//        //平移后的坐标
//        double py_x = x + CommonConstant.MQ_B1_X/CommonConstant.BLC_X;
//        double py_y = y + CommonConstant.MQ_B1_Y/CommonConstant.BLC_Y;
//        System.out.println("平移后的坐标为:X:"+py_x+",Y:"+py_y);
//        //放大后的坐标
//        double fd_x = CommonConstant.BLC_X*py_x;
//        double fd_y = CommonConstant.BLC_Y*py_y;
//        System.out.println("放大后的坐标为:X:"+fd_x+",Y:"+fd_y);
    }

    //B1定位坐标
    private void changCoordinateB1(ThirdPosition thirdPosition) {
        Map<String,Double> map = new HashMap<>();//初始化
        String x1 = thirdPosition.getPositionx();
        String y1 = thirdPosition.getPositiony();
        map = CoordinateUtil.changCoordinate("B1",x1,y1);
        thirdPosition.setPositionx(String.valueOf(map.get("x")));
        thirdPosition.setPositiony(String.valueOf(map.get("y")));
        addPositionInfo(thirdPosition);//添加转换后坐标信息
    }

    //B2定位坐标
    private void changCoordinateB2(ThirdPosition thirdPosition) {
        Map<String,Double> map = new HashMap<>();//初始化
        String x1 = thirdPosition.getPositionx();
        String y1 = thirdPosition.getPositiony();
        map = CoordinateUtil.changCoordinate("B2",x1,y1);
        thirdPosition.setPositionx(String.valueOf(map.get("x")));
        thirdPosition.setPositiony(String.valueOf(map.get("y")));
        addPositionInfo(thirdPosition);//添加转换后坐标信息
    }

    private boolean addPositionInfo(ThirdPosition thirdPosition) {
        String uuid = UUIDGenerator.creatUUID();
        String sql = "INSERT INTO sys_cmcc_position ( `position_id`,`node_id`,`system_id`,`type`,`group`," +
                "`group_number`,`position_x`,`position_y`,`create_by`,`create_time` )  VALUES " +
                " ( '"+uuid+"','"+thirdPosition.getNodeId()+"','"+thirdPosition.getSystemId()+"','"+thirdPosition.getType()+"','"+thirdPosition.getGroup()+"'," +
                ""+thirdPosition.getGroupNumber()+",'"+thirdPosition.getPositionx()+"','"+thirdPosition.getPositiony()+"','"+CommonConstant.CMCC+"','"+sf.format(thirdPosition.getCreateTime())+"' )";
        System.out.println("**********"+sql);
        boolean ok = addDataToDataBase(sql);
        return ok;
    }

    @Override
    public String getBuildingAllInfo() {
        HashMap<String,Object> map = new HashMap<>();
        String tmsp = String.valueOf(System.currentTimeMillis()/1000);
        map.put("bldId",CommonConstant.BLD_ID);
        map.put("ts",tmsp);
        String str = StringUtils.join(Arrays.asList(new String[]{CommonConstant.BLD_ID,tmsp,CommonConstant.CMCC_KEY}),",")
                .replace(",","");
        System.out.println("sign参数:"+str);
        String strMd5 = MD5Util.getMD5LowerCase(str);
        System.out.println("加密后参数:"+str);
        map.put("sgn",strMd5);
        String post = HttpUtil.post(CommonConstant.BUILD_URL,map);
        System.out.println("请求结果:"+post);
        return post;
    }

    @Override
    public List<HistoryPoint> getPositionByDeviceId(String deviceId,String startTime,String endTime) {
        HashMap<String,Object> map = new HashMap<>();
        map.put("buildingId",CommonConstant.BLD_ID);
        map.put("deviceId",deviceId);
        map.put("page","0");
        map.put("count","200");
        map.put("startTime",startTime);
        map.put("endTime",endTime);
        String post = HttpUtil.post(CommonConstant.HISTORY_URL,map);
        JSONObject json = JSONObject.parseObject(post);
        List<HistoryPoint> list = JSONObject.parseArray(json.get("data").toString(), HistoryPoint.class);
        for (HistoryPoint historyPoint : list) {
            String x1 = String.valueOf(historyPoint.getX());
            String y1 = String.valueOf(historyPoint.getY());
            Map<String,Double> pointMap = new HashMap<>();//初始化
            pointMap = CoordinateUtil.changCoordinate("B1",x1,y1);
            historyPoint.setX(pointMap.get("x"));
            historyPoint.setY(pointMap.get("y"));
        }
        return list;
    }

    @Override
    public String getAlarmListByCount() {
        HashMap<String,Object> map = new HashMap<>();
        String tmsp = String.valueOf(System.currentTimeMillis()/1000);
        map.put("bldId",CommonConstant.BLD_ID);
        map.put("ts",tmsp);
        map.put("count","10");
        String str = StringUtils.join(Arrays.asList(new String[]{CommonConstant.BLD_ID,"10",tmsp,CommonConstant.CMCC_KEY}),",")
                .replace(",","");
        String strMd5 = MD5Util.getMD5LowerCase(str);
        map.put("sgn",strMd5);
        String post = HttpUtil.post(CommonConstant.ALARM_URL,map);
        return post;
    }

    @Override
    public String getWeekAlarmState() {
        HashMap<String,Object> map = new HashMap<>();
        String tmsp = String.valueOf(System.currentTimeMillis()/1000);
        map.put("bldId",CommonConstant.BLD_ID);
        map.put("ts",tmsp);
        String str = StringUtils.join(Arrays.asList(new String[]{CommonConstant.BLD_ID,tmsp,CommonConstant.CMCC_KEY}),",")
                .replace(",","");
        String strMd5 = MD5Util.getMD5LowerCase(str);
        map.put("sgn",strMd5);
        String post = HttpUtil.post(CommonConstant.WEEK_ALARM_URL,map);
        return post;
    }

    @Override
    public ThirdPosition getRealTimeLocation(String deviceId) {
        ThirdPosition thirdPosition = new ThirdPosition();
        thirdPosition = thirdMapper.getRealTimeLocation(deviceId);
        return thirdPosition;
    }

    @Override
    public List<SafeArea> getSafeArea() {
        String get = HttpUtil.get(CommonConstant.SAFE_AREA_URL+"?buildingId="+CommonConstant.BLD_ID);
        JSONObject json = JSONObject.parseObject(get);
        List<SafeArea> list = JSONObject.parseArray(json.get("data").toString(), SafeArea.class);
        for (SafeArea safeArea : list) {
            String areas = safeArea.getAreas();//66&363,100&348,108&367,74&381
            List<String> arealist = Arrays.asList(areas.split(","));
            StringBuffer data = new StringBuffer();
            for (String area:arealist) {
                String x1 = area.split("&")[0];
                String y1 = area.split("&")[1];
                Map<String,Double> map = new HashMap<>();//初始化
                map = CoordinateUtil.changCoordinate("B1",x1,y1);
                data.append(String.valueOf(map.get("x"))+"&"+String.valueOf(map.get("y"))).append(",");
            }
            safeArea.setAreas(data.toString().substring(0,data.toString().length()-1));
        }
        return list;
    }

    @Override
    public List<SafeArea> getSafeAreaNew() {
        List<SafeArea> list = new ArrayList<>();
        String get = getBuildingAllInfo();
        JSONObject json = JSONObject.parseObject(get);
        Map jsonToMap =  JSONObject.parseObject(json.toJSONString());
        JSONObject dataJson = JSONObject.parseObject(jsonToMap.get("data").toString());
        Map safeMap =  JSONObject.parseObject(dataJson.toJSONString());
        List<SafeAreaNew> dataList = JSONObject.parseArray(safeMap.get("monitoringArea").toString(), SafeAreaNew.class);
        for (SafeAreaNew safeAreaNew : dataList) {
            SafeArea safeArea = new SafeArea();
            String areas = safeAreaNew.getAreas();//66&363,100&348,108&367,74&381
            List<String> arealist = Arrays.asList(areas.split(","));
            StringBuffer data = new StringBuffer();
            for (String area:arealist) {
                String x1 = area.split("&")[0];
                String y1 = area.split("&")[1];
                Map<String,Double> map = new HashMap<>();//初始化
                if(safeAreaNew.getFloorId()==26){
                    map = CoordinateUtil.changCoordinate("B2",x1,y1);
                }else{
                    map = CoordinateUtil.changCoordinate("B1",x1,y1);
                }
                data.append(String.valueOf(map.get("x"))+"&"+String.valueOf(map.get("y"))).append(",");
            }
            safeArea.setAreas(data.toString().substring(0,data.toString().length()-1));
            safeArea.setBuildingId(safeAreaNew.getBuildingId());
            safeArea.setId(safeAreaNew.getId());
            safeArea.setName(safeAreaNew.getMName());
            safeArea.setMTypeDefine(safeAreaNew.getMTypeDefine());
            safeArea.setBgColor(safeAreaNew.getBgColor());
            safeArea.setFloorId(safeAreaNew.getFloorId());
            safeArea.setIsShow(safeAreaNew.getIsShow());
            safeArea.setMType(safeAreaNew.getMType());
            list.add(safeArea);
        }
        return list;
    }

    @Override
    public List<HistoryPoint> getPositionByDeviceIdTest(String deviceId) {
        List<HistoryPoint> list = new ArrayList<>();
        String historyPointStr = "1500.12,1500.96;1510.01,1560.56;1580.01,1580.56;1800.01,1810.56;1910.01,2010.56;" +
                "2510.21,2557.56;3510.01,3510.56;5510.01,5515.56;7512.01,7510.56;8514.01,8610.56;";
        String [] pointHistoryArr = historyPointStr.split(";");
        for (int i = 0; i < pointHistoryArr.length; i++) {
            System.out.println(pointHistoryArr[i]);
            String [] pointArr = pointHistoryArr[i].split(",");
            HistoryPoint historyPoint = new HistoryPoint();
            historyPoint.setId(i+1);
            historyPoint.setBuildingId("10");
            historyPoint.setDeviceId(deviceId);
            historyPoint.setX(Double.valueOf(pointArr[0]));
            historyPoint.setY(Double.valueOf(pointArr[1]));
            list.add(historyPoint);
        }
        return list;
    }


}