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>