增加获取附近停车场或超市地址任务

This commit is contained in:
hanrenchun 2025-11-18 17:12:27 +08:00
parent a6f08a7ad2
commit c771fac8dc
7 changed files with 269 additions and 3 deletions

View File

@ -0,0 +1,116 @@
package com.ruoyi.database.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 停车场附近表(ParkingNearInfo)实体类
*
* @author makejava
* @since 2025-11-18 13:45:09
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName(value = "parking_near_info")
@ApiModel(value = "ParkingNearInfo", description = "停车场附近表")
public class ParkingNearInfo {
/**
* 主键
*/
@ApiModelProperty("主键")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 创建时间
*/
@ApiModelProperty("创建时间")
@Excel(name = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 创建者
*/
@ApiModelProperty("创建者")
@Excel(name = "创建者")
private Integer createBy;
/**
* 更新时间
*/
@ApiModelProperty("更新时间")
@Excel(name = "更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/**
* 更新者
*/
@ApiModelProperty("更新者")
@Excel(name = "更新者")
private Integer updateBy;
/**
* 名称
*/
@ApiModelProperty("名称")
@Excel(name = "名称")
private String name;
/**
* 地址
*/
@ApiModelProperty("地址")
@Excel(name = "地址")
private String address;
/**
* 经度
*/
@ApiModelProperty("经度")
@Excel(name = "经度")
private Double lng;
/**
* 纬度
*/
@ApiModelProperty("纬度")
@Excel(name = "纬度")
private Double lat;
/**
* 类型 1.附近停车场 2.附近常客隆
*/
@ApiModelProperty("类型 1.附近停车场 2.附近常客隆")
@Excel(name = "类型 1.附近停车场 2.附近常客隆")
private Integer nearType;
/**
* 距离
*/
@ApiModelProperty("距离")
@Excel(name = "距离")
private String distance;
/**
* 中心停车场编码
*/
@ApiModelProperty("中心停车场编码")
@Excel(name = "中心停车场编码")
private String code;
}

View File

@ -0,0 +1,16 @@
package com.ruoyi.database.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.database.domain.ParkingNearInfo;
import org.apache.ibatis.annotations.Mapper;
/**
* 停车场附近表(ParkingNearInfo) Mapper 接口
*
* @author makejava
* @since ${date}
*/
@Mapper
public interface ParkingNearInfoMapper extends BaseMapper<ParkingNearInfo> {
}

View File

@ -0,0 +1,14 @@
package com.ruoyi.database.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.database.domain.ParkingNearInfo;
/**
* (停车场附近表)Service
*
* @author makejava
* @since 2025-11-18 13:45:10
*/
public interface ParkingNearInfoService extends IService<ParkingNearInfo> {
}

View File

@ -0,0 +1,19 @@
package com.ruoyi.database.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.database.domain.ParkingNearInfo;
import com.ruoyi.database.mapper.ParkingNearInfoMapper;
import com.ruoyi.database.service.ParkingNearInfoService;
import org.springframework.stereotype.Service;
/**
* (停车场附近表)ServiceImpl
*
* @author makejava
* @since 2025-11-18 13:45:10
*/
@Service
public class ParkingNearInfoServiceImpl extends ServiceImpl<ParkingNearInfoMapper, ParkingNearInfo> implements ParkingNearInfoService {
}

View File

@ -0,0 +1,98 @@
package com.ruoyi.database.task;
import java.util.List;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.ruoyi.business.util.StringKit;
import com.ruoyi.database.domain.BaseParkingLotInfo;
import com.ruoyi.database.domain.ParkingNearInfo;
import com.ruoyi.database.service.BaseParkingLotInfoService;
import com.ruoyi.database.service.ParkingNearInfoService;
import com.ruoyi.database.util.AmapGeocoding;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
@Component
@RequiredArgsConstructor
public class ParkingNearInfoTask {
/**
* 用于获取停车场经纬度
* 以及停车场周边地址经纬度名称
*/
private static final Logger logger = LoggerFactory.getLogger(ParkingNearInfoTask.class);
private final BaseParkingLotInfoService baseParkingLotInfoService;
private final ParkingNearInfoService parkingNearInfoService;
// @Scheduled(initialDelay = 100, fixedRate = 3000000)
@RequestMapping("/test")
public void getPois() {
try {
List<BaseParkingLotInfo> list = baseParkingLotInfoService.list();
list.forEach(baseParkingLotInfo -> {
String location = AmapGeocoding.getLocation(baseParkingLotInfo.getAddress());
JSONArray pois = AmapGeocoding.getPois(location,1000,"停车场");
for (int i = 0; i < pois.size(); i++) {
JSONObject poi = pois.getJSONObject(i);
String name = poi.getStr("name");
String address = poi.getStr("address");
String location1 = poi.getStr("location"); // 格式: "经度,纬度"
String[] lngLat = location1.split(",");
String longitude = lngLat[0]; // 经度
String latitude = lngLat[1]; // 纬度
String distance = poi.getStr("distance", "未知"); // 距离中心点的距离
ParkingNearInfo parkingNearInfo = new ParkingNearInfo();
parkingNearInfo.setName(name);
parkingNearInfo.setAddress(address);
parkingNearInfo.setLng(Double.valueOf(longitude));
parkingNearInfo.setLat(Double.valueOf(latitude));
parkingNearInfo.setNearType(1);
parkingNearInfo.setDistance(distance + "");
parkingNearInfo.setCode(baseParkingLotInfo.getCode());
LambdaUpdateWrapper<ParkingNearInfo> queryWrapper = new LambdaUpdateWrapper<>();
queryWrapper.eq(ParkingNearInfo::getCode, baseParkingLotInfo.getCode());
queryWrapper.eq(ParkingNearInfo::getName, name);
queryWrapper.eq(ParkingNearInfo::getAddress, address);
parkingNearInfoService.saveOrUpdate(parkingNearInfo,queryWrapper);
}
JSONArray pois1 = AmapGeocoding.getPois(location,1000,"常客隆超市");
for (int i = 0; i < pois1.size(); i++) {
JSONObject poi = pois1.getJSONObject(i);
String name = poi.getStr("name");
String address = poi.getStr("address");
String location1 = poi.getStr("location"); // 格式: "经度,纬度"
String[] lngLat = location1.split(",");
String longitude = lngLat[0]; // 经度
String latitude = lngLat[1]; // 纬度
String distance = poi.getStr("distance", "未知"); // 距离中心点的距离
ParkingNearInfo parkingNearInfo = new ParkingNearInfo();
parkingNearInfo.setName(name);
parkingNearInfo.setAddress(address);
parkingNearInfo.setLng(Double.valueOf(longitude));
parkingNearInfo.setLat(Double.valueOf(latitude));
parkingNearInfo.setNearType(2);
parkingNearInfo.setDistance(distance + "");
parkingNearInfo.setCode(baseParkingLotInfo.getCode());
LambdaUpdateWrapper<ParkingNearInfo> queryWrapper = new LambdaUpdateWrapper<>();
queryWrapper.eq(ParkingNearInfo::getCode, baseParkingLotInfo.getCode());
queryWrapper.eq(ParkingNearInfo::getName, name);
queryWrapper.eq(ParkingNearInfo::getAddress, address);
parkingNearInfoService.saveOrUpdate(parkingNearInfo,queryWrapper);
}
});
} catch (Exception e) {
logger.info(StringKit.getTrace(e));
}
}
}

View File

@ -83,7 +83,7 @@ public class AmapGeocoding {
* @param searchKeyword 关键词 停车场 * @param searchKeyword 关键词 停车场
* @return * @return
*/ */
public static String getPois(String centerLocation,int searchRadius,String searchKeyword) { public static JSONArray getPois(String centerLocation,int searchRadius,String searchKeyword) {
try { try {
// 构建请求URL注意实际应用中需对keyword进行URL编码 // 构建请求URL注意实际应用中需对keyword进行URL编码
String urlStr = String.format("https://restapi.amap.com/v3/place/around?key=%s&location=%s&radius=%d&keywords=%s&sortrule=distance", String urlStr = String.format("https://restapi.amap.com/v3/place/around?key=%s&location=%s&radius=%d&keywords=%s&sortrule=distance",
@ -119,6 +119,7 @@ public class AmapGeocoding {
System.out.printf("名称: %s | 地址: %s | 经纬度: %s | 距离: %s米%n", System.out.printf("名称: %s | 地址: %s | 经纬度: %s | 距离: %s米%n",
name, address, location, distance); name, address, location, distance);
} }
return pois;
} else { } else {
String errorInfo = jsonResponse.getStr("info"); String errorInfo = jsonResponse.getStr("info");
System.err.println("请求失败: " + errorInfo); System.err.println("请求失败: " + errorInfo);
@ -134,10 +135,10 @@ public class AmapGeocoding {
public static void main(String[] args) { public static void main(String[] args) {
// String location = getLocation("常熟市海虞北路27号"); // String location = getLocation("海虞北路27号");
// System.out.println(location); // System.out.println(location);
// 120.754471,31.666573 // 120.754471,31.666573
getPois("120.754471,31.666573",1000,"常客隆超市"); // getPois("120.754471,31.666573",1000,"常客隆超市");
} }
} }

View File

@ -3,6 +3,7 @@ package com.ruoyi;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.scheduling.annotation.EnableScheduling;
/** /**
* 场所管控 启动程序 * 场所管控 启动程序
@ -10,6 +11,7 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
* @author ruoyi * @author ruoyi
*/ */
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
@EnableScheduling
public class RuoYiApplication public class RuoYiApplication
{ {
public static void main(String[] args) public static void main(String[] args)