jinpengyong
2023-08-25 5242d687d4edcd6c0f7e10fb82b0e5505dbb3da3
Merge remote-tracking branch 'origin/wb' into qa
15 files added
7 files modified
1254 ■■■■■ changed files
screen-api/src/main/java/com/moral/api/service/impl/ExcelServiceImpl.java 8 ●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/constant/RedisConstants.java 3 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/controller/CruiserController.java 80 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/controller/ManageCoordinateController.java 101 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/controller/ManageCoordinateDetailController.java 107 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/controller/TestController.java 49 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/entity/ManageCoordinate.java 57 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/entity/ManageCoordinateDetail.java 66 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/mapper/HistorySecondCruiserMapper.java 6 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/mapper/ManageCoordinateDetailMapper.java 7 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/mapper/ManageCoordinateMapper.java 8 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/dto/cruiser/CruiserDTO.java 55 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/HistorySecondCruiserService.java 8 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/ManageCoordinateDetailService.java 23 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/ManageCoordinateService.java 26 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/HistorySecondCruiserServiceImpl.java 90 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/ManageCoordinateDetailServiceImpl.java 264 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/ManageCoordinateServiceImpl.java 94 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/util/RoadUtils.java 157 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/resources/mapper/HistorySecondCruiserMapper.xml 9 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/resources/mapper/ManageCoordinateDetailMapper.xml 18 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/resources/mapper/ManageCoordinateMapper.xml 18 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/impl/ExcelServiceImpl.java
@@ -561,7 +561,13 @@
        for (Map<String, Object> map : list) {
            HistoryDaily historyDaily = new HistoryDaily();
            String time = map.remove("time").toString();
            Date date = DateUtils.dateStringToDate(time);
            Date date=null;
            if (time.length()>20){
                date = DateUtils.dateStringToDate(time);
            }else {
                date = DateUtils.getDate(time, DateUtils.yyyy_MM_dd_HH_mm_ss_EN);
            }
            String mac = map.remove("mac").toString();
            String value = JSONObject.toJSONString(map);
            historyDaily.setMac(mac);
screen-common/src/main/java/com/moral/constant/RedisConstants.java
@@ -105,4 +105,7 @@
    public static final String DATE_CHANG_SHU = "date_changshu";
    public static final String DATE_COORDINATE="data_coordinate";
}
screen-manage/src/main/java/com/moral/api/controller/CruiserController.java
New file
@@ -0,0 +1,80 @@
package com.moral.api.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
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.RestController;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.moral.api.entity.ManageCoordinate;
import com.moral.api.entity.SpecialDevice;
import com.moral.api.pojo.dto.cruiser.CruiserDTO;
import com.moral.api.service.HistorySecondCruiserService;
import com.moral.api.service.ManageCoordinateService;
import com.moral.constant.ResponseCodeEnum;
import com.moral.constant.ResultMessage;
import com.moral.util.WebUtils;
@Slf4j
@Api(tags = {"走航车路段查询"})
@RestController
@RequestMapping("cruiserInfo")
public class CruiserController {
    @Autowired
    private HistorySecondCruiserService historySecondCruiserService;
    /**
     *
     * @return
     */
    @GetMapping("selectCruisers")
    @ApiOperation(value = "获取所有走航车")
    public ResultMessage selectCruisers() {
        List<SpecialDevice> specialDevices = historySecondCruiserService.selectCruisers();
        if (ObjectUtils.isEmpty(specialDevices)){
            return ResultMessage.fail(ResponseCodeEnum.TARGET_IS_NULL.getCode(),
                    ResponseCodeEnum.TARGET_IS_NULL.getMsg());
        }
        return ResultMessage.ok(specialDevices);
    }
    @GetMapping("getCruiserInFo")
    @ApiOperation(value = "走航车轨迹", notes = "走航车轨迹")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String"),
            @ApiImplicitParam(name = "mac", value = "设备mac", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "time1", value = "时间,2021-08-18", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "time2", value = "时间,2021-08-18", required = true, paramType = "query", dataType = "String")
    })
    public ResultMessage getCruiserInFo(HttpServletRequest request){
        Map<String, Object> params = WebUtils.getParametersStartingWith(request, null);
        if (!params.containsKey("mac") || !params.containsKey("time1")|| !params.containsKey("time2")) {
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        }
        Map<String, Object> cruiserInFo = historySecondCruiserService.getCruiserInFo(params);
        return ObjectUtils.isEmpty(cruiserInFo)? ResultMessage.ok() : ResultMessage.ok(cruiserInFo);
    }
}
screen-manage/src/main/java/com/moral/api/controller/ManageCoordinateController.java
New file
@@ -0,0 +1,101 @@
package com.moral.api.controller;
import io.swagger.annotations.Api;
import javafx.scene.input.Mnemonic;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Update;
import org.springframework.beans.factory.annotation.Autowired;
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.RestController;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.moral.api.entity.ManageCoordinate;
import com.moral.api.service.ManageCoordinateService;
import com.moral.constant.ResponseCodeEnum;
import com.moral.constant.ResultMessage;
@Slf4j
@RestController
@Api(tags = {"添加路段模块"})
@RequestMapping("coordinate")
@CrossOrigin(origins = "*", maxAge = 3600)
public class ManageCoordinateController {
    @Autowired
    private ManageCoordinateService manageCoordinateService;
    /**
     * 添加路段信息
     * @param params
     * @return
     */
    @PostMapping("interCruiserRoad")
    public ResultMessage interCruiserRoad(@RequestBody Map<String,Object> params){
        if (!params.containsKey("startPoint") || !params.containsKey("endPoint")) {
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        }
        Integer integer = manageCoordinateService.interCoordinate(params);
        if (integer==null){
            return ResultMessage.ok("路段已存在");
        }
        return ResultMessage.ok();
    }
    /**
     * 修改路段信息
     * @param manageCoordinate
     * @return
     */
    @PostMapping("updateCruiserRoad")
    public ResultMessage updateCruiserRoad(@RequestBody ManageCoordinate manageCoordinate){
        if (ObjectUtils.isEmpty(manageCoordinate)){
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        }
        manageCoordinateService.updateCoordinate(manageCoordinate);
        return ResultMessage.ok();
    }
    /**
     * 删除路段信息
     * @param id
     * @return
     */
    @GetMapping("deleteCruiserRoad")
    public ResultMessage deleteCruiser(Integer id){
        if (id==null){
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        }
        Integer integer = manageCoordinateService.deleteCoordinate(id);
        if (integer==1){
          return  ResultMessage.ok("删除失败");
        }
        return ResultMessage.ok();
    }
    /**
     * 查询路段信息
     *
     * @return
     */
    @GetMapping("selectCruiserRoad")
    public ResultMessage selectCruiser(){
        List<ManageCoordinate> manageCoordinates = manageCoordinateService.selectCoordinate();
        if (ObjectUtils.isEmpty(manageCoordinates)){
            return ResultMessage.fail(ResponseCodeEnum.TARGET_IS_NULL.getCode(),
                    ResponseCodeEnum.TARGET_IS_NULL.getMsg());
        }
        return ResultMessage.ok(manageCoordinates);
    }
}
screen-manage/src/main/java/com/moral/api/controller/ManageCoordinateDetailController.java
New file
@@ -0,0 +1,107 @@
package com.moral.api.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
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.RestController;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.moral.api.entity.ManageCoordinateDetail;
import com.moral.api.service.ManageCoordinateDetailService;
import com.moral.constant.ResponseCodeEnum;
import com.moral.constant.ResultMessage;
@Slf4j
@RestController
@Api(tags = {"添加经纬度模块"})
@RequestMapping("coordinateDetail")
public class ManageCoordinateDetailController {
    @Autowired
    private ManageCoordinateDetailService manageCoordinateDetailService;
    /**
     * 新增经纬度点
     * @param
     * @return
     */
    @PostMapping("insert")
    public ResultMessage insert(@RequestBody Map<String,Object> params){
        if (ObjectUtils.isEmpty(params)){
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        }
        Integer integer = manageCoordinateDetailService.insertCoordinate(params);
        if (integer==1){
            return ResultMessage.ok("经纬度已存在");
        }
        if (integer==2){
            return ResultMessage.ok("经纬度不存在");
        }
        return ResultMessage.ok();
    }
    /**
     * 批量新增
     * @return
     */
    @PostMapping("batch")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String"),
            @ApiImplicitParam(name = "coordinateId", value = "路段id", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "time1", value = "时间,2021-08-18", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "time2", value = "时间,2021-08-18", required = true, paramType = "query", dataType = "String")
    })
    public ResultMessage  getInserts(@RequestBody Map<String,Object> params){
        if (!params.containsKey("coordinateId") || !params.containsKey("time1")|| !params.containsKey("time2")) {
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        }
        Integer integer = manageCoordinateDetailService.batchAll(params);
        if (integer!=200){
            return ResultMessage.ok("操作失败");
        }
         return ResultMessage.ok();
    }
    /**
     * 修改经纬度点
     * @param manageCoordinateDetail
     * @return
     */
    @PostMapping("update")
    public ResultMessage update(@RequestBody ManageCoordinateDetail manageCoordinateDetail){
        return null;
    }
    /**
     * 查询坐标点
     * @return
     */
    @PostMapping("select")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "token", value = "token", required = true, paramType = "header", dataType = "String"),
            @ApiImplicitParam(name = "coordinateId", value = "路段id", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "time1", value = "时间,2021-08-18", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "time2", value = "时间,2021-08-18", required = true, paramType = "query", dataType = "String")
    })
    public ResultMessage selectAll(@RequestBody Map<String,Object> params){
        if (!params.containsKey("coordinateId") || !params.containsKey("time1")|| !params.containsKey("time2")) {
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        }
        Map<String,Object> rsMap = manageCoordinateDetailService.selectCoordinate(params);
        return ResultMessage.ok(rsMap);
    }
}
screen-manage/src/main/java/com/moral/api/controller/TestController.java
@@ -8,13 +8,15 @@
import com.moral.api.entity.Test;
import com.moral.api.entity.UnitConversion;
import com.moral.api.mapper.SysDictDataMapper;
import com.moral.api.pojo.dto.account.AccountDTO;
import com.moral.api.pojo.dto.accountRole.AccountRoleDTO;
import com.moral.api.pojo.dto.adjust.AdjustDTO;
import com.moral.api.service.DeviceService;
import com.moral.api.service.SensorService;
import com.moral.api.service.SysDictDataService;
import com.moral.api.service.TestService;
import com.moral.api.service.impl.SensorServiceImpl;
import com.moral.api.util.AdjustDataUtils;
import com.moral.api.util.CacheUtils;
import com.moral.api.util.CompareFieldUtils;
import com.moral.constant.Constants;
import com.moral.constant.KafkaConstants;
import com.moral.constant.RedisConstants;
@@ -213,8 +215,9 @@
    private SensorService sensorService;
    @Autowired
    SysDictDataMapper sysDictDataMapper;
    @Autowired
    private  AdjustDataUtils adjustDataUtils;
    private DeviceService deviceService;
    @ApiOperation(value = "因子测试", notes = "因子测试")
    @ApiImplicitParams({
@@ -222,18 +225,34 @@
    })
    @RequestMapping(value = "getSensor", method = RequestMethod.GET)
    public void getSensor() {
        HashMap<String, Object> map = new HashMap<>();
        map.put("time","1692364996898");
        map.put("mac","p5dnd7a0391986");
        HashMap<String, Object> map1 = new HashMap<>();
        HashMap<String, Object> map2 = new HashMap<>();
        Map<String, Object> adjust = adjustDataUtils.adjust(map, map1, map2, "2");
        QueryWrapper<Sensor> queryWrapper = new QueryWrapper<>();
        queryWrapper.select("code").eq("is_delete", Constants.NOT_DELETE);
        List<Object> list = sensorService.listObjs(queryWrapper);
        for (Object o : list) {
            System.out.println(o);
        }
        HashMap<String, Object> deviceData = new HashMap<>();
        deviceData.put("time","1691996716839");
        deviceData.put("DataTime","20230814150000");
        deviceData.put("mac","p5dnd7a0245362");
        deviceData.put("a00e12","11479.2");
        deviceData.put("a00e13","44.0");
        deviceData.put("a21005","0.0264");
        deviceData.put("a21004","20.0");
        deviceData.put("a21026","30.5");
        deviceData.put("a01001","38.1");
        deviceData.put("a05024","279.6");
        deviceData.put("a01002","54.2");
        deviceData.put("a01007","2.45");
        deviceData.put("a01006","805.834");
        deviceData.put("a01008","102.0");
        deviceData.put("a34002","4.9");
        deviceData.put("a34004","4.9");
        deviceData.put("a00e03","798.5");
        deviceData.put("a00e04","2.9");
        deviceData.put("a99054","0.0348");
        deviceData.put("a31001","0.1");
        Map<String, Object> map = deviceService.adjustDeviceData(deviceData, "2");
//        QueryWrapper<Sensor> queryWrapper = new QueryWrapper<>();
//        queryWrapper.select("code").eq("is_delete", Constants.NOT_DELETE);
//        List<Object> list = sensorService.listObjs(queryWrapper);
//        for (Object o : list) {
//            System.out.println(o);
//        }
    }
}
screen-manage/src/main/java/com/moral/api/entity/ManageCoordinate.java
New file
@@ -0,0 +1,57 @@
package com.moral.api.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.activerecord.Model;
/**
 * 走航路段表
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class ManageCoordinate  extends Model<ManageCoordinate> {
    private static final long serialVersionUID = 1L;
    /**
     * 路段id
     */
    @TableId(value = "coordinate_id", type = IdType.AUTO)
    private  Integer coordinateId;
    /**
     * 起点名称
     */
    private  String startPoint;
    /**
     * 终点名称
     */
    private  String endPoint;
    /**
     *是否删除
     */
    private  Integer isDel;
    /**
     * 创建时间
     */
    private Date  createTime;
    /**
     * 修改时间
     */
    private Date  updateTime;
    /**
     * 修改人id
     *
     */
    private  Integer updateUserId;
    /**
     * 修改人名称
     */
    private  String updayeUserName;
}
screen-manage/src/main/java/com/moral/api/entity/ManageCoordinateDetail.java
New file
@@ -0,0 +1,66 @@
package com.moral.api.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.activerecord.Model;
@Data
@EqualsAndHashCode(callSuper = false)
public class ManageCoordinateDetail extends Model<ManageCoordinateDetail> {
    private static final long serialVersionUID = 1L;
    /**
     * 经纬度id
     */
    @TableId(value = "id", type = IdType.AUTO)
    private  Integer id;
    /**
     * 路段id
     */
    private  Integer coordinateId;
    /**
     * 经度
     */
    private  Double longitude;
    /**
     *纬度
     */
    private  Double latitude;
    /**
     * 创建时间
     */
    private Date createTime;
    /**
     * 修改时间
     */
    private Date  updateTime;
    /**
     * 修改人id
     *
     */
    private  Integer updateUserId;
    /**
     * 修改人名称
     */
    private  String updayeUserName;
    private String state;
    @TableField(exist = false)
    private  String code;
}
screen-manage/src/main/java/com/moral/api/mapper/HistorySecondCruiserMapper.java
@@ -1,7 +1,11 @@
package com.moral.api.mapper;
import java.util.List;
import java.util.Map;
import com.moral.api.entity.HistorySecondCruiser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.moral.api.pojo.dto.cruiser.CruiserDTO;
/**
 * <p>
@@ -13,4 +17,6 @@
 */
public interface HistorySecondCruiserMapper extends BaseMapper<HistorySecondCruiser> {
    List<CruiserDTO> getCruiserInfo(Map<String,Object> params);
}
screen-manage/src/main/java/com/moral/api/mapper/ManageCoordinateDetailMapper.java
New file
@@ -0,0 +1,7 @@
package com.moral.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.moral.api.entity.ManageCoordinateDetail;
public interface ManageCoordinateDetailMapper extends BaseMapper<ManageCoordinateDetail> {
}
screen-manage/src/main/java/com/moral/api/mapper/ManageCoordinateMapper.java
New file
@@ -0,0 +1,8 @@
package com.moral.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.moral.api.entity.ManageCoordinate;
public interface ManageCoordinateMapper extends BaseMapper<ManageCoordinate> {
}
screen-manage/src/main/java/com/moral/api/pojo/dto/cruiser/CruiserDTO.java
New file
@@ -0,0 +1,55 @@
package com.moral.api.pojo.dto.cruiser;
import lombok.Data;
import java.util.Objects;
import com.fasterxml.jackson.annotation.JsonProperty;
@Data
public class CruiserDTO {
    /**
     * 数据时间
     */
    private String time;
    /**
     * 纬度
     */
    @JsonProperty(value = "flylat")
    private Double flyLat;
    /**
     * 经度
     */
    @JsonProperty(value = "flylon")
    private Double flyLon;
    private String data;
    private String state;
    public CruiserDTO() {
        this.state = "1"; // 设置state字段默认值为1
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        CruiserDTO cruiser = (CruiserDTO) o;
        //当type、color 内容都相等的时候,才返回true
        return Objects.equals(flyLat, cruiser.flyLat) &&
                Objects.equals(flyLon, cruiser.flyLon);
    }
    @Override
    public int hashCode() {
        return Objects.hash(flyLat, flyLon);
    }
}
screen-manage/src/main/java/com/moral/api/service/HistorySecondCruiserService.java
@@ -2,7 +2,10 @@
import com.moral.api.entity.HistorySecondCruiser;
import com.baomidou.mybatisplus.extension.service.IService;
import com.moral.api.entity.SpecialDevice;
import com.moral.api.pojo.dto.cruiser.CruiserDTO;
import java.util.List;
import java.util.Map;
/**
@@ -18,4 +21,9 @@
    //秒数据insert
    void insertHistorySecond(Map<String, Object> data);
    //获取所有走航车
    List<SpecialDevice> selectCruisers();
    //查询走航车轨迹
    Map<String,Object> getCruiserInFo(Map<String, Object> params);
}
screen-manage/src/main/java/com/moral/api/service/ManageCoordinateDetailService.java
New file
@@ -0,0 +1,23 @@
package com.moral.api.service;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.extension.service.IService;
import com.moral.api.entity.ManageCoordinateDetail;
public interface ManageCoordinateDetailService extends IService<ManageCoordinateDetail> {
    Integer insertCoordinate(Map<String,Object> params);
    Map<String,Object> selectCoordinate(Map<String,Object> params);
    Integer batchAll(Map<String,Object> params);
}
screen-manage/src/main/java/com/moral/api/service/ManageCoordinateService.java
New file
@@ -0,0 +1,26 @@
package com.moral.api.service;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.extension.service.IService;
import com.moral.api.entity.ManageCoordinate;
public interface ManageCoordinateService extends IService<ManageCoordinate> {
    /**
     * 添加路段信息
     * @param params
     * @return
     */
    Integer interCoordinate(Map<String,Object> params);
    void updateCoordinate(ManageCoordinate manageCoordinate);
    Integer deleteCoordinate(Integer id);
    List<ManageCoordinate> selectCoordinate();
}
screen-manage/src/main/java/com/moral/api/service/impl/HistorySecondCruiserServiceImpl.java
@@ -1,24 +1,38 @@
package com.moral.api.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.moral.api.entity.HistorySecondCruiser;
import com.moral.api.entity.Sensor;
import com.moral.api.entity.SpecialDevice;
import com.moral.api.mapper.HistorySecondCruiserMapper;
import com.moral.api.mapper.SpecialDeviceMapper;
import com.moral.api.pojo.dto.cruiser.CruiserDTO;
import com.moral.api.service.DeviceService;
import com.moral.api.service.HistorySecondCruiserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.api.service.SpecialDeviceService;
import com.moral.api.util.RoadUtils;
import com.moral.constant.Constants;
import com.moral.constant.RedisConstants;
import com.moral.util.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import java.sql.Wrapper;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
@@ -29,6 +43,7 @@
 * @author moral
 * @since 2021-09-02
 */
@Slf4j
@Service
public class HistorySecondCruiserServiceImpl extends ServiceImpl<HistorySecondCruiserMapper, HistorySecondCruiser> implements HistorySecondCruiserService {
@@ -37,6 +52,8 @@
    @Autowired
    private SpecialDeviceService specialDeviceService;
    @Autowired
    private SpecialDeviceMapper specialDeviceMapper;
    @Autowired
    private RedisTemplate redisTemplate;
@@ -78,4 +95,77 @@
        historySecondCruiser.setBatch(batchTime);
        historySecondCruiserMapper.insert(historySecondCruiser);
    }
    /**
     * 获取所有走航车信息
     * @return
     */
    @Override
    public List<SpecialDevice> selectCruisers() {
        QueryWrapper<SpecialDevice> wrapper = new QueryWrapper<>();
        wrapper.select("name","mac");
        wrapper.eq("is_delete",Constants.NOT_DELETE);
        List<SpecialDevice> specialDevices = specialDeviceMapper.selectList(wrapper);
        return specialDevices;
    }
    /**
     * 查看走航车轨迹
     * @param params
     * @return
     */
    @Override
    public Map<String,Object> getCruiserInFo(Map<String, Object> params) {
        HashMap<String, Object> map = new HashMap<>();
        String mac = params.get("mac").toString();
        String time1 = params.get("time1").toString();
        params.put("dateFormat", "%Y-%m-%d %H:%i:%s");
        ArrayList<Object> list = new ArrayList<>();
        List<CruiserDTO> data = (List<CruiserDTO>) redisTemplate.opsForHash().get(RedisConstants.DATE_COORDINATE, mac + time1);
//        List<CruiserDTO> data = (List<CruiserDTO>) redisTemplate.opsForValue().get(mac + time1);
        if (ObjectUtils.isEmpty(data)){
            data = historySecondCruiserMapper.getCruiserInfo(params);
            data = data.stream().distinct().collect(Collectors.toList());
            data.removeIf(o->{
                if (ObjectUtils.isEmpty(o.getFlyLon()) || ObjectUtils.isEmpty(o.getFlyLat())) {
                    return true;
                }
                double lon = o.getFlyLon();
                double lat = o.getFlyLat();
                double[] doubles = RoadUtils.transformWGS84ToBD09(lon, lat);
                Matcher matcher = Pattern.compile("\\d*\\.\\d{8}").matcher(""+doubles[0]);
                matcher.find();
                String s = matcher.group();
                Matcher matcher1 = Pattern.compile("\\d*\\.\\d{8}").matcher(""+doubles[1]);
                matcher1.find();
                String s1 = matcher1.group();
                o.setFlyLon(Double.parseDouble(s));
                o.setFlyLat(Double.parseDouble(s1));
                o.setData(lon+"_"+lat);
//            o.setFlyLon(doubles[0]);
//            o.setFlyLat(doubles[1]);
                if (lon < 70 || lon > 150 || lat < 20 || lat > 60) {
                    return true;
                }
                return false;
            });
            redisTemplate.opsForHash().put(RedisConstants.DATE_COORDINATE,mac+time1,data);
            //设置过期时间
            redisTemplate.opsForHash().getOperations().expire(RedisConstants.DATE_COORDINATE,600, TimeUnit.SECONDS);
        }
//        redisTemplate.opsForValue().set(mac+time1,rsCruiser,600, TimeUnit.SECONDS);
        map.put("rsData",data);
        map.put("data",list);
        log.info(data.size()+"");
        log.info(data.size()+"");
        return map;
    }
}
screen-manage/src/main/java/com/moral/api/service/impl/ManageCoordinateDetailServiceImpl.java
New file
@@ -0,0 +1,264 @@
package com.moral.api.service.impl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.api.entity.ManageAccount;
import com.moral.api.entity.ManageCoordinateDetail;
import com.moral.api.mapper.HistorySecondCruiserMapper;
import com.moral.api.mapper.ManageCoordinateDetailMapper;
import com.moral.api.pojo.dto.cruiser.CruiserDTO;
import com.moral.api.pojo.redisBean.AccountInfoDTO;
import com.moral.api.service.ManageCoordinateDetailService;
import com.moral.api.util.RoadUtils;
import com.moral.constant.Constants;
import com.moral.constant.RedisConstants;
import com.moral.util.DateUtils;
import com.moral.util.TokenUtils;
import com.sun.org.apache.regexp.internal.RE;
@Service
@Slf4j
public class ManageCoordinateDetailServiceImpl extends ServiceImpl<ManageCoordinateDetailMapper, ManageCoordinateDetail> implements ManageCoordinateDetailService {
    @Autowired
    private  ManageCoordinateDetailMapper manageCoordinateDetailMapper;
    @Autowired
    private HistorySecondCruiserMapper historySecondCruiserMapper;
    @Autowired
    private RedisTemplate redisTemplate;
    /**
     * 新增经纬度
     * @param params
     * @return
     */
    @Override
    @Transactional
    public Integer insertCoordinate(Map<String,Object> params) {
        HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
        String token = request.getHeader("token");
        AccountInfoDTO accountInfoDTO = (AccountInfoDTO) TokenUtils.getUserInfoByToken(token);
        ManageAccount manageAccount = accountInfoDTO.getAccount();
        Integer id = manageAccount.getId();
        String userName = manageAccount.getUserName();
        int coordinateId = Integer.parseInt(params.get("coordinateId").toString());
        List<Map<String, Object>> data = (List<Map<String, Object>>) params.get("data");
        for (Map<String, Object> datum : data) {
            ManageCoordinateDetail manageCoordinateDetail = new ManageCoordinateDetail();
            String code = datum.get("code").toString();
            String state = datum.get("state").toString();
            if (state.equals("2")){
                String[] rs = code.split("_");
                manageCoordinateDetail.setCoordinateId(coordinateId);
                manageCoordinateDetail.setLongitude(Double.parseDouble(rs[0]));
                manageCoordinateDetail.setLatitude(Double.parseDouble(rs[1]));
                manageCoordinateDetail.setState("2");
                manageCoordinateDetail.setUpdateUserId(id);
                manageCoordinateDetail.setUpdayeUserName(userName);
                QueryWrapper<ManageCoordinateDetail> wrapper = new QueryWrapper<>();
                wrapper.eq("coordinate_id",coordinateId);
                wrapper.eq("longitude",manageCoordinateDetail.getLongitude());
                wrapper.eq("latitude",manageCoordinateDetail.getLatitude());
                Integer integer = manageCoordinateDetailMapper.selectCount(wrapper);
                if (integer>=1){
                    return 1;
                }
                manageCoordinateDetailMapper.insert(manageCoordinateDetail);
            }else {
                Object id1 = datum.get("id");
                if (ObjectUtils.isEmpty(id1)){
                    return 2;
                }
                manageCoordinateDetailMapper.deleteById(Integer.parseInt(id1.toString()));
//                    manageCoordinateDetailMapper.delete(wrapper);
            }
        }
        return 200;
    }
    /**
     * 查询坐标点
     * @param params
     * @return
     */
    @Override
    public Map<String,Object> selectCoordinate(Map<String, Object> params) {
        HashMap<String,Object> rsMap = new HashMap<>();
        String mac = params.get("mac").toString();
        String time1 = params.get("time1").toString();
        ArrayList<ManageCoordinateDetail> rsList1 = new ArrayList<>();
        params.put("dateFormat", "%Y-%m-%d %H:%i:%s");
        String coordinateId = params.get("coordinateId").toString();
        QueryWrapper<ManageCoordinateDetail> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("coordinate_id",coordinateId);
        List<ManageCoordinateDetail> manageCoordinateDetails = manageCoordinateDetailMapper.selectList(queryWrapper);
        List<CruiserDTO> cruiserInfo = (List<CruiserDTO>) redisTemplate.opsForHash().get(RedisConstants.DATE_COORDINATE, mac + time1);
        if (ObjectUtils.isEmpty(cruiserInfo)){
            cruiserInfo = historySecondCruiserMapper.getCruiserInfo(params);
            cruiserInfo = cruiserInfo.stream().distinct().collect(Collectors.toList());
            cruiserInfo.removeIf(o->{
                    if (ObjectUtils.isEmpty(o.getFlyLon()) || ObjectUtils.isEmpty(o.getFlyLat())) {
                        return true;
                    }
                    double lon = o.getFlyLon();
                    double lat = o.getFlyLat();
                    double[] doubles = RoadUtils.transformWGS84ToBD09(lon, lat);
                    Matcher matcher = Pattern.compile("\\d*\\.\\d{8}").matcher(""+doubles[0]);
                    matcher.find();
                    String s = matcher.group();
                    Matcher matcher1 = Pattern.compile("\\d*\\.\\d{8}").matcher(""+doubles[1]);
                    matcher1.find();
                    String s1 = matcher1.group();
                    o.setFlyLon(Double.parseDouble(s));
                    o.setFlyLat(Double.parseDouble(s1));
                    o.setData(lon+"_"+lat);
//            o.setFlyLon(doubles[0]);
//            o.setFlyLat(doubles[1]);
                    if (lon < 70 || lon > 150 || lat < 20 || lat > 60) {
                        return true;
                    }
                    return false;
                });
                redisTemplate.opsForHash().put(RedisConstants.DATE_COORDINATE,mac+time1,cruiserInfo);
                //设置过期时间
                redisTemplate.opsForHash().getOperations().expire(RedisConstants.DATE_COORDINATE,6000, TimeUnit.SECONDS);
        }
//        List<CruiserDTO> cruiserInfo = historySecondCruiserMapper.getCruiserInfo(params);
        if (ObjectUtils.isEmpty(manageCoordinateDetails)){
            rsMap.put("rsData",cruiserInfo);
            rsMap.put("data",rsList1);
            return rsMap;
        }
        for (int i=cruiserInfo.size()-1;i>0;i--) {
            CruiserDTO cruiserDTO = cruiserInfo.get(i);
            String data = cruiserDTO.getData();
            String[] rs = data.split("_");
            String flyLon = rs[0];
            String flyLat = rs[1];
            for (ManageCoordinateDetail manageCoordinateDetail : manageCoordinateDetails) {
                String latitude = manageCoordinateDetail.getLatitude().toString();
                String longitude = manageCoordinateDetail.getLongitude().toString();
                if (latitude.equals(flyLat) && longitude.equals(flyLon)){
                    manageCoordinateDetail.setCode(data);
                    manageCoordinateDetail.setLongitude(cruiserDTO.getFlyLon());
                    manageCoordinateDetail.setLatitude(cruiserDTO.getFlyLat());
                    rsList1.add(manageCoordinateDetail);
                    cruiserInfo.remove(i);
                    break;
                }
            }
        }
        rsMap.put("rsData",cruiserInfo);
        rsMap.put("data",rsList1);
        return rsMap;
    }
    /**
     * 批量添加
     * @param params
     * @return
     */
    @Override
    @Transactional
    public Integer batchAll(Map<String, Object> params) {
        params.put("dateFormat", "%Y-%m-%d %H:%i:%s");
        int coordinateId = Integer.parseInt(params.get("coordinateId").toString());
        QueryWrapper<ManageCoordinateDetail> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("coordinate_id",coordinateId);
        String time1 = params.remove("time1").toString();
        String time2 = params.remove("time2").toString();
        long l = DateUtils.compareDateStr(time1, time2);
        if (l>0){
            params.put("time1",time1);
            params.put("time2",time2);
        }else {
            params.put("time1",time2);
            params.put("time2",time1);
        }
        int j =0;
        List<ManageCoordinateDetail> manageCoordinateDetails = manageCoordinateDetailMapper.selectList(queryWrapper);
        List<CruiserDTO> cruiserInfo = historySecondCruiserMapper.getCruiserInfo(params);
        if (ObjectUtils.isEmpty(manageCoordinateDetails)){
            for (CruiserDTO cruiserDTO : cruiserInfo) {
                Double flyLat = cruiserDTO.getFlyLat();
                Double flyLon = cruiserDTO.getFlyLon();
                ManageCoordinateDetail rsDTO = new ManageCoordinateDetail();
                rsDTO.setLatitude(flyLat);
                rsDTO.setLongitude(flyLon);
                rsDTO.setState("2");
                rsDTO.setCreateTime(new Date());
                rsDTO.setUpdateTime(new Date());
                rsDTO.setCoordinateId(coordinateId);
                manageCoordinateDetailMapper.insert(rsDTO);
                j++;
                log.info(j+"");
            }
        }else {
            for (int i=cruiserInfo.size()-1;i>0;i--) {
                CruiserDTO cruiserDTO = cruiserInfo.get(i);
                Double flyLat = cruiserDTO.getFlyLat();
                Double flyLon = cruiserDTO.getFlyLon();
                for (ManageCoordinateDetail manageCoordinateDetail : manageCoordinateDetails) {
                    String latitude = manageCoordinateDetail.getLatitude().toString();
                    String longitude = manageCoordinateDetail.getLongitude().toString();
                    if (latitude.equals(flyLat+"") && longitude.equals(flyLon+"")){
                        cruiserInfo.remove(i);
                        break;
                    }
                }
            }
            for (CruiserDTO cruiserDTO : cruiserInfo) {
                Double flyLat = cruiserDTO.getFlyLat();
                Double flyLon = cruiserDTO.getFlyLon();
                ManageCoordinateDetail rsDTO = new ManageCoordinateDetail();
                rsDTO.setLatitude(flyLat);
                rsDTO.setLongitude(flyLon);
                rsDTO.setState("2");
                rsDTO.setCreateTime(new Date());
                rsDTO.setUpdateTime(new Date());
                rsDTO.setCoordinateId(coordinateId);
                manageCoordinateDetailMapper.insert(rsDTO);
                j++;
                log.info(j+"");
            }
        }
        return 200;
    }
}
screen-manage/src/main/java/com/moral/api/service/impl/ManageCoordinateServiceImpl.java
New file
@@ -0,0 +1,94 @@
package com.moral.api.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.api.entity.ManageCoordinate;
import com.moral.api.entity.ManageCoordinateDetail;
import com.moral.api.mapper.ManageCoordinateDetailMapper;
import com.moral.api.mapper.ManageCoordinateMapper;
import com.moral.api.service.ManageCoordinateDetailService;
import com.moral.api.service.ManageCoordinateService;
@Service
public class ManageCoordinateServiceImpl extends ServiceImpl<ManageCoordinateMapper, ManageCoordinate> implements ManageCoordinateService {
    @Autowired
    private ManageCoordinateMapper manageCoordinateMapper;
    @Autowired
    private ManageCoordinateDetailMapper manageCoordinateDetailMapper;
    /**
     * 新增路段
     * @param params
     * @return
     */
    @Override
    public Integer interCoordinate(Map<String, Object> params) {
        String startPoint = params.get("startPoint").toString();
        String endPoint = params.get("endPoint").toString();
        QueryWrapper<ManageCoordinate> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("start_point",startPoint);
        queryWrapper.eq("end_point",endPoint);
        Integer integer = manageCoordinateMapper.selectCount(queryWrapper);
        if (integer>=1){
            return null;
        }
        ManageCoordinate manageCoordinate = new ManageCoordinate();
        manageCoordinate.setCreateTime(new Date());
        manageCoordinate.setUpdateTime(new Date());
        manageCoordinate.setStartPoint(startPoint);
        manageCoordinate.setEndPoint(endPoint);
        manageCoordinate.setIsDel(0);
        int code = manageCoordinateMapper.insert(manageCoordinate);
        return code;
    }
    /**
     * 修改路段
     * @param manageCoordinate
     */
    @Override
    public void updateCoordinate(ManageCoordinate manageCoordinate) {
        manageCoordinate.setUpdateTime(new Date());
        manageCoordinateMapper.updateById(manageCoordinate);
    }
    /**
     * 删除路段
     * @param id
     */
    @Override
    public Integer deleteCoordinate(Integer id) {
        QueryWrapper<ManageCoordinateDetail> wrapper = new QueryWrapper<>();
        wrapper.eq("coordinate_id",id);
        Integer integer = manageCoordinateDetailMapper.selectCount(wrapper);
        if (integer>0){
            return 1;
        }
        manageCoordinateMapper.deleteById(id);
        return 200;
    }
    /**
     * 查询路段信息
     * @return
     */
    @Override
    public List<ManageCoordinate> selectCoordinate() {
        QueryWrapper<ManageCoordinate> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("is_del",0);
        List<ManageCoordinate> manageCoordinates = manageCoordinateMapper.selectList(queryWrapper);
        return manageCoordinates;
    }
}
screen-manage/src/main/java/com/moral/api/util/RoadUtils.java
New file
@@ -0,0 +1,157 @@
package com.moral.api.util;
/**
 * 经纬度转换
 */
public class RoadUtils {
    private static final double x_PI = 3.14159265358979324 * 3000.0 / 180.0;
    private static final double PI = 3.1415926535897932384626;
    private static final double a = 6378245.0;
    private static final double ee = 0.00669342162296594323;
    /**
     * WGS84 坐标 转 GCJ02
     *
     * @param lng 经度
     * @param lat 纬度
     * @return GCJ02 坐标:[经度,纬度]
     */
    public static double[] transformWGS84ToGCJ02(double lng, double lat) {
        if (outOfChina(lng, lat)) {
            return new double[]{lng, lat};
        } else {
            double dLat = transformLat(lng - 105.0, lat - 35.0);
            double dLng = transformLng(lng - 105.0, lat - 35.0);
            double redLat = lat / 180.0 * PI;
            double magic = Math.sin(redLat);
            magic = 1 - ee * magic * magic;
            double sqrtMagic = Math.sqrt(magic);
            dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * PI);
            dLng = (dLng * 180.0) / (a / sqrtMagic * Math.cos(redLat) * PI);
            double mgLat = lat + dLat;
            double mgLng = lng + dLng;
            return new double[]{mgLng, mgLat};
        }
    }
    private static double transformLat(double lng, double lat) {
        double ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
        ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
        ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
        ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
        return ret;
    }
    private static double transformLng(double lng, double lat) {
        double ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
        ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
        ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
        ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
        return ret;
    }
    /**
     * 判断坐标是否不在国内
     *
     * @param lng 经度
     * @param lat 纬度
     * @return 坐标是否在国内
     */
    public static boolean outOfChina(double lng, double lat) {
        return (lng < 72.004 || lng > 137.8347) || (lat < 0.8293 || lat > 55.8271);
    }
    /**
     * GCJ02 转百度坐标
     *
     * @param lng GCJ02 经度
     * @param lat GCJ02 纬度
     * @return 百度坐标:[经度,纬度]
     */
    public static double[] transformGCJ02ToBD09(double lng, double lat) {
        double z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI);
        double theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI);
        double bd_lng = z * Math.cos(theta) + 0.0065;
        double bd_lat = z * Math.sin(theta) + 0.006;
        return new double[]{bd_lng, bd_lat};
    }
    /**
     * WGS84 转 百度坐标BD09
     *
     * @param lng 经度
     * @param lat 纬度
     * @return BD09 坐标:[经度,纬度]
     */
    public static double[] transformWGS84ToBD09(double lng, double lat) {
        double[] lngLat = transformWGS84ToGCJ02(lng, lat);
        return transformGCJ02ToBD09(lngLat[0], lngLat[1]);
    }
    /**
     * 百度坐标(BD09)转 GCJ02
     *
     * @param lng 百度经度
     * @param lat 百度纬度
     * @return GCJ02 坐标:[经度,纬度]
     */
    public static double[] transformBD09ToGCJ02(double lng, double lat) {
        double x = lng - 0.0065;
        double y = lat - 0.006;
        double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_PI);
        double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_PI);
        double gcj_lng = z * Math.cos(theta);
        double gcj_lat = z * Math.sin(theta);
        return new double[]{gcj_lng, gcj_lat};
    }
    /**
     * 百度坐标BD09 转 WGS84
     *
     * @param lng 经度
     * @param lat 纬度
     * @return WGS84 坐标:[经度,纬度]
     */
    public static double[] transformBD09ToWGS84(double lng, double lat) {
        double[] lngLat = transformBD09ToGCJ02(lng, lat);
        return transformGCJ02ToWGS84(lngLat[0], lngLat[1]);
    }
    /**
     * GCJ02 转 WGS84
     *
     * @param lng 经度
     * @param lat 纬度
     * @return WGS84坐标:[经度,纬度]
     */
    public static double[] transformGCJ02ToWGS84(double lng, double lat) {
        if (outOfChina(lng, lat)) {
            return new double[]{lng, lat};
        } else {
            double dLat = transformLat(lng - 105.0, lat - 35.0);
            double dLng = transformLng(lng - 105.0, lat - 35.0);
            double radLat = lat / 180.0 * PI;
            double magic = Math.sin(radLat);
            magic = 1 - ee * magic * magic;
            double sqrtMagic = Math.sqrt(magic);
            dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * PI);
            dLng = (dLng * 180.0) / (a / sqrtMagic * Math.cos(radLat) * PI);
            double mgLat = lat + dLat;
            double mgLng = lng + dLng;
            return new double[]{lng * 2 - mgLng, lat * 2 - mgLat};
        }
    }
}
screen-manage/src/main/resources/mapper/HistorySecondCruiserMapper.xml
@@ -11,4 +11,13 @@
                    <result column="batch" property="batch" />
        </resultMap>
    <select id="getCruiserInfo" resultType="com.moral.api.pojo.dto.cruiser.CruiserDTO">
        select  DATE_FORMAT(`time`, #{dateFormat}) AS time,value ->>'$.flylat' as flyLat,value ->>'$.flylon' as flyLon
        from history_second_cruiser
        WHERE mac = #{mac}
          AND `time` <![CDATA[>=]]> #{time1}
          AND `time` <![CDATA[<=]]> #{time2}
        order by time
    </select>
</mapper>
screen-manage/src/main/resources/mapper/ManageCoordinateDetailMapper.xml
New file
@@ -0,0 +1,18 @@
<?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.api.mapper.ManageCoordinateDetailMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.moral.api.entity.ManageCoordinateDetail">
        <id column="id" property="id" />
        <result column="coordinate_id" property="coordinateId" />
        <result column="longitude" property="longitude" />
        <result column="latitude" property="latitude" />
        <result column="create_time" property="createTime" />
        <result column="update_time" property="updateTime" />
        <result column="update_user_id" property="updateUserId" />
        <result column="updaye_user_name" property="updayeUserName" />
    </resultMap>
</mapper>
screen-manage/src/main/resources/mapper/ManageCoordinateMapper.xml
New file
@@ -0,0 +1,18 @@
<?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.api.mapper.ManageCoordinateMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.moral.api.entity.ManageCoordinate">
        <id column="coordinate_id" property="coordinateId" />
        <result column="start_point" property="startPoint" />
        <result column="end_point" property="endPoint" />
        <result column="is_del" property="isDel" />
        <result column="create_time" property="createTime" />
        <result column="update_time" property="updateTime" />
        <result column="update_user_id" property="updateUserId" />
        <result column="updaye_user_name" property="updayeUserName" />
    </resultMap>
</mapper>