From 0a9652f144a33f3f3f1950f67607e004f6bbbbd3 Mon Sep 17 00:00:00 2001 From: Shikong <919411476@qq.com> Date: Mon, 8 May 2023 15:56:16 +0800 Subject: [PATCH] =?UTF-8?q?locationRecord=20=E5=AE=9A=E4=BD=8D=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../record/LocationRecordController.java | 39 ++++++++++ .../convert/LocationRecordConvertor.java | 26 +++++++ .../record/dto/LocationRecordParams.java | 18 +++++ .../location/record/vo/LocationRecordVo.java | 74 +++++++++++++++++++ .../record/LocationRecordService.java | 11 +++ .../record/LocationRecordServiceImpl.java | 39 ++++++++++ 6 files changed, 207 insertions(+) create mode 100644 backend/java/sk-matrix-service/api/src/main/java/cn/skcks/matrix/v2/api/locatioin/record/LocationRecordController.java create mode 100644 backend/java/sk-matrix-service/model/src/main/java/cn/skcks/matrix/v2/model/location/record/convert/LocationRecordConvertor.java create mode 100644 backend/java/sk-matrix-service/model/src/main/java/cn/skcks/matrix/v2/model/location/record/dto/LocationRecordParams.java create mode 100644 backend/java/sk-matrix-service/model/src/main/java/cn/skcks/matrix/v2/model/location/record/vo/LocationRecordVo.java create mode 100644 backend/java/sk-matrix-service/services/src/main/java/cn/skcks/matrix/v2/services/location/record/LocationRecordService.java create mode 100644 backend/java/sk-matrix-service/services/src/main/java/cn/skcks/matrix/v2/services/location/record/LocationRecordServiceImpl.java diff --git a/backend/java/sk-matrix-service/api/src/main/java/cn/skcks/matrix/v2/api/locatioin/record/LocationRecordController.java b/backend/java/sk-matrix-service/api/src/main/java/cn/skcks/matrix/v2/api/locatioin/record/LocationRecordController.java new file mode 100644 index 0000000..5630eea --- /dev/null +++ b/backend/java/sk-matrix-service/api/src/main/java/cn/skcks/matrix/v2/api/locatioin/record/LocationRecordController.java @@ -0,0 +1,39 @@ +package cn.skcks.matrix.v2.api.locatioin.record; + +import cn.skcks.matrix.v2.annotation.web.JsonMapping; +import cn.skcks.matrix.v2.annotation.web.methods.PostJson; +import cn.skcks.matrix.v2.config.swagger.SwaggerConfig; +import cn.skcks.matrix.v2.model.location.record.dto.LocationRecordParams; +import cn.skcks.matrix.v2.model.location.record.vo.LocationRecordVo; +import cn.skcks.matrix.v2.services.location.record.LocationRecordService; +import cn.skcks.matrix.v2.utils.json.JsonResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springdoc.core.models.GroupedOpenApi; +import org.springframework.context.annotation.Bean; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Collection; +import java.util.List; + +@Tag(name = "定位记录") +@RestController +@JsonMapping("/location/record") +@RequiredArgsConstructor +public class LocationRecordController { + private final LocationRecordService locationRecordService; + + @Bean + public GroupedOpenApi docs() { + return SwaggerConfig.api("Location Record", "/location/record"); + } + + @PostJson("/") + @Operation(summary = "查询记录") + public JsonResponse> getLocationRecord(@RequestBody LocationRecordParams params){ + return locationRecordService.getLocationRecord(params).parseResponse(); + } +} diff --git a/backend/java/sk-matrix-service/model/src/main/java/cn/skcks/matrix/v2/model/location/record/convert/LocationRecordConvertor.java b/backend/java/sk-matrix-service/model/src/main/java/cn/skcks/matrix/v2/model/location/record/convert/LocationRecordConvertor.java new file mode 100644 index 0000000..e82212d --- /dev/null +++ b/backend/java/sk-matrix-service/model/src/main/java/cn/skcks/matrix/v2/model/location/record/convert/LocationRecordConvertor.java @@ -0,0 +1,26 @@ +package cn.skcks.matrix.v2.model.location.record.convert; + +import cn.skcks.matrix.v2.model.location.record.vo.LocationRecordVo; +import cn.skcks.matrix.v2.orm.mybatis.dynamic.model.LocationRecord; +import com.github.pagehelper.PageInfo; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; +import org.mapstruct.factory.Mappers; + +import java.util.Collection; + +@Mapper +public abstract class LocationRecordConvertor { + public final static LocationRecordConvertor INSTANCE = Mappers.getMapper(LocationRecordConvertor.class); + + @Mappings({ + @Mapping(source = "id", target = "id"), + @Mapping(source = "userId", target = "userId") + }) + abstract public LocationRecordVo daoToVo(LocationRecord user); + + abstract public Collection daoToVo(Collection users); + + abstract public PageInfo daoToVo(PageInfo userPageInfo); +} diff --git a/backend/java/sk-matrix-service/model/src/main/java/cn/skcks/matrix/v2/model/location/record/dto/LocationRecordParams.java b/backend/java/sk-matrix-service/model/src/main/java/cn/skcks/matrix/v2/model/location/record/dto/LocationRecordParams.java new file mode 100644 index 0000000..a2e01d5 --- /dev/null +++ b/backend/java/sk-matrix-service/model/src/main/java/cn/skcks/matrix/v2/model/location/record/dto/LocationRecordParams.java @@ -0,0 +1,18 @@ +package cn.skcks.matrix.v2.model.location.record.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +@Data +public class LocationRecordParams { + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date startTime; + + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date endTime; +} diff --git a/backend/java/sk-matrix-service/model/src/main/java/cn/skcks/matrix/v2/model/location/record/vo/LocationRecordVo.java b/backend/java/sk-matrix-service/model/src/main/java/cn/skcks/matrix/v2/model/location/record/vo/LocationRecordVo.java new file mode 100644 index 0000000..9b52ac7 --- /dev/null +++ b/backend/java/sk-matrix-service/model/src/main/java/cn/skcks/matrix/v2/model/location/record/vo/LocationRecordVo.java @@ -0,0 +1,74 @@ +package cn.skcks.matrix.v2.model.location.record.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +@Data +@Schema(title = "定位记录信息") +public class LocationRecordVo { + @Schema(description = "记录id") + private String id; + + @Schema(description = "定位时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date locationTime; + + @Schema(description = "定位类型") + private Integer locationType; + + @Schema(description = "(高德) 纬度") + private Double latitude; + + @Schema(description = "(高德) 经度") + private Double longitude; + + @Schema(description = "精度") + private Double accuracy; + + @Schema(description = "高度(m)") + private Double altitude; + + @Schema(description = "方向角(°)") + private Double bearing; + + @Schema(description = "速度(m/s)") + private Double speed; + + @Schema(description = "国家") + private String country; + + @Schema(description = "省份") + private String province; + + @Schema(description = "城市") + private String city; + + @Schema(description = "区") + private String district; + + @Schema(description = "街道") + private String street; + + @Schema(description = "街道号码") + private String streetNumber; + + @Schema(description = "城市代号") + private String cityCode; + + @Schema(description = "区域编码") + private String adCode; + + @Schema(description = "详细地址(大概)") + private String address; + + @Schema(description = "描述") + private String description; + + @Schema(description = "用户id") + private String userId; +} diff --git a/backend/java/sk-matrix-service/services/src/main/java/cn/skcks/matrix/v2/services/location/record/LocationRecordService.java b/backend/java/sk-matrix-service/services/src/main/java/cn/skcks/matrix/v2/services/location/record/LocationRecordService.java new file mode 100644 index 0000000..de100aa --- /dev/null +++ b/backend/java/sk-matrix-service/services/src/main/java/cn/skcks/matrix/v2/services/location/record/LocationRecordService.java @@ -0,0 +1,11 @@ +package cn.skcks.matrix.v2.services.location.record; + +import cn.skcks.matrix.v2.model.location.record.dto.LocationRecordParams; +import cn.skcks.matrix.v2.model.location.record.vo.LocationRecordVo; +import cn.skcks.matrix.v2.model.services.ServiceResult; + +import java.util.Collection; + +public interface LocationRecordService { + ServiceResult> getLocationRecord(LocationRecordParams params); +} diff --git a/backend/java/sk-matrix-service/services/src/main/java/cn/skcks/matrix/v2/services/location/record/LocationRecordServiceImpl.java b/backend/java/sk-matrix-service/services/src/main/java/cn/skcks/matrix/v2/services/location/record/LocationRecordServiceImpl.java new file mode 100644 index 0000000..1f9e2df --- /dev/null +++ b/backend/java/sk-matrix-service/services/src/main/java/cn/skcks/matrix/v2/services/location/record/LocationRecordServiceImpl.java @@ -0,0 +1,39 @@ +package cn.skcks.matrix.v2.services.location.record; + +import cn.skcks.matrix.v2.model.location.record.convert.LocationRecordConvertor; +import cn.skcks.matrix.v2.model.location.record.dto.LocationRecordParams; +import cn.skcks.matrix.v2.model.location.record.vo.LocationRecordVo; +import cn.skcks.matrix.v2.model.services.ServiceResult; +import cn.skcks.matrix.v2.orm.mybatis.dynamic.mapper.LocationRecordDynamicSqlSupport; +import cn.skcks.matrix.v2.orm.mybatis.dynamic.mapper.LocationRecordMapper; +import cn.skcks.matrix.v2.orm.mybatis.dynamic.model.LocationRecord; +import lombok.RequiredArgsConstructor; +import org.mybatis.dynamic.sql.SqlBuilder; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class LocationRecordServiceImpl implements LocationRecordService{ + private final LocationRecordMapper locationRecordMapper; + @Override + public ServiceResult> getLocationRecord(LocationRecordParams params) { + List recordList = locationRecordMapper.select((s)-> s.applyWhere(dsl -> { + if (params.getStartTime() != null) { + dsl.and(LocationRecordDynamicSqlSupport.locationTime, SqlBuilder.isGreaterThanOrEqualTo(params.getStartTime())); + } + + if (params.getEndTime() != null) { + dsl.and(LocationRecordDynamicSqlSupport.locationTime,SqlBuilder.isLessThanOrEqualTo(params.getEndTime())); + } + + dsl.and(LocationRecordDynamicSqlSupport.id,SqlBuilder.isNotNull()); + })); + + return ServiceResult.>builder() + .result(recordList.stream().map(LocationRecordConvertor.INSTANCE::daoToVo).toList()) + .build(); + } +}