From 5e530d4f5fa936f63d0b866e2b965c56d3944550 Mon Sep 17 00:00:00 2001 From: Shikong <919411476@qq.com> Date: Tue, 9 May 2023 20:54:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E4=BD=8D=E4=BF=A1=E6=81=AF=E4=B8=8A?= =?UTF-8?q?=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.idea/codestream.xml | 2 +- .../record/LocationRecordController.java | 17 +++-- .../convert/LocationRecordConvertor.java | 3 + .../record/dto/LocationRecordDto.java | 72 +++++++++++++++++++ .../record/LocationRecordService.java | 8 ++- .../record/LocationRecordServiceImpl.java | 53 ++++++++++++-- 6 files changed, 140 insertions(+), 15 deletions(-) create mode 100644 backend/java/sk-matrix-service/model/src/main/java/cn/skcks/matrix/v2/model/location/record/dto/LocationRecordDto.java diff --git a/backend/golang/matrix-middle-service/.idea/codestream.xml b/backend/golang/matrix-middle-service/.idea/codestream.xml index 0c4e9ad..10c9107 100644 --- a/backend/golang/matrix-middle-service/.idea/codestream.xml +++ b/backend/golang/matrix-middle-service/.idea/codestream.xml @@ -1,6 +1,6 @@ - \ No newline at end of file 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 index 728de0f..e21e6a0 100644 --- 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 @@ -2,11 +2,12 @@ package cn.skcks.matrix.v2.api.locatioin.record; import cn.skcks.matrix.v2.annotation.web.JsonMapping; import cn.skcks.matrix.v2.annotation.web.auth.Auth; -import cn.skcks.matrix.v2.auth.claims.Claim; import cn.skcks.matrix.v2.annotation.web.methods.PostJson; +import cn.skcks.matrix.v2.auth.claims.Claim; import cn.skcks.matrix.v2.config.swagger.SwaggerConfig; import cn.skcks.matrix.v2.model.jwt.dto.Claims; import cn.skcks.matrix.v2.model.location.record.convert.LocationRecordConvertor; +import cn.skcks.matrix.v2.model.location.record.dto.LocationRecordDto; import cn.skcks.matrix.v2.model.location.record.dto.LocationRecordParams; import cn.skcks.matrix.v2.model.location.record.dto.PageLocationRecordParams; import cn.skcks.matrix.v2.model.location.record.vo.LocationRecordVo; @@ -24,7 +25,6 @@ import lombok.extern.slf4j.Slf4j; 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.RequestHeader; import org.springframework.web.bind.annotation.RestController; import java.util.Collection; @@ -44,11 +44,18 @@ public class LocationRecordController { return SwaggerConfig.api("Location Record", "/location/record"); } + @PostJson("/post") + @Operation(summary = "上报定位记录") + public JsonResponse postLocationRecord(@Claim Claims claims, @RequestBody LocationRecordDto dto) throws Exception { + locationRecordService.postLocationRecord(dto,claims); + return JsonResponse.success(null); + } + + @PostJson("/list") @Operation(summary = "查询记录") public JsonResponse> getLocationRecord(@Claim Claims claims, @RequestBody LocationRecordParams params){ - log.info("claims {}", claims); - ServiceResult> result = locationRecordService.getLocationRecord(params, claims.getUserId()); + ServiceResult> result = locationRecordService.getLocationRecord(params, claims); return JsonResponse.success(LocationRecordConvertor.INSTANCE.daoToVo(result.getResult())); } @@ -56,7 +63,7 @@ public class LocationRecordController { @Operation(summary = "分页查询记录") public JsonResponse> getPageLocationRecord(@Claim Claims claims, @RequestBody PageLocationRecordParams params){ PageInfo pageInfo = - LocationRecordConvertor.INSTANCE.daoToVo(locationRecordService.getPageLocationRecord(params, claims.getUserId()).getResult()); + LocationRecordConvertor.INSTANCE.daoToVo(locationRecordService.getPageLocationRecord(params, claims).getResult()); return JsonResponse.success(PageWrapper.of(pageInfo)); } 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 index a17670e..7a321bb 100644 --- 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 @@ -1,5 +1,6 @@ package cn.skcks.matrix.v2.model.location.record.convert; +import cn.skcks.matrix.v2.model.location.record.dto.LocationRecordDto; 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; @@ -23,4 +24,6 @@ public abstract class LocationRecordConvertor { abstract public Collection daoToVo(Collection dao); abstract public PageInfo daoToVo(PageInfo daoPageInfo); + + abstract public LocationRecord dtoToDao(LocationRecordDto dto); } diff --git a/backend/java/sk-matrix-service/model/src/main/java/cn/skcks/matrix/v2/model/location/record/dto/LocationRecordDto.java b/backend/java/sk-matrix-service/model/src/main/java/cn/skcks/matrix/v2/model/location/record/dto/LocationRecordDto.java new file mode 100644 index 0000000..cb76bdf --- /dev/null +++ b/backend/java/sk-matrix-service/model/src/main/java/cn/skcks/matrix/v2/model/location/record/dto/LocationRecordDto.java @@ -0,0 +1,72 @@ +package cn.skcks.matrix.v2.model.location.record.dto; + +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 +public class LocationRecordDto { + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @Schema(description = "回调时间", example = "2023-05-08 00:00:00") + private Date callbackTime; + + @Schema(description = "定位时间", example = "2023-05-08 00:00:00") + @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; +} 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 index 90edd99..66f80d2 100644 --- 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 @@ -1,5 +1,7 @@ package cn.skcks.matrix.v2.services.location.record; +import cn.skcks.matrix.v2.model.jwt.dto.Claims; +import cn.skcks.matrix.v2.model.location.record.dto.LocationRecordDto; import cn.skcks.matrix.v2.model.location.record.dto.LocationRecordParams; import cn.skcks.matrix.v2.model.location.record.dto.PageLocationRecordParams; import cn.skcks.matrix.v2.model.services.ServiceResult; @@ -9,7 +11,9 @@ import com.github.pagehelper.PageInfo; import java.util.Collection; public interface LocationRecordService { - ServiceResult> getLocationRecord(LocationRecordParams params, String userId); + ServiceResult> getLocationRecord(LocationRecordParams params, Claims claims); - ServiceResult> getPageLocationRecord(PageLocationRecordParams params, String userId); + ServiceResult> getPageLocationRecord(PageLocationRecordParams params, Claims claims); + + ServiceResult postLocationRecord(LocationRecordDto locationRecordDto, Claims claims) throws Exception; } 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 index f06da65..0c8e134 100644 --- 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 @@ -1,6 +1,9 @@ package cn.skcks.matrix.v2.services.location.record; +import cn.hutool.core.util.IdUtil; +import cn.skcks.matrix.v2.model.jwt.dto.Claims; import cn.skcks.matrix.v2.model.location.record.convert.LocationRecordConvertor; +import cn.skcks.matrix.v2.model.location.record.dto.LocationRecordDto; import cn.skcks.matrix.v2.model.location.record.dto.LocationRecordParams; import cn.skcks.matrix.v2.model.location.record.dto.PageLocationRecordParams; import cn.skcks.matrix.v2.model.location.record.vo.LocationRecordVo; @@ -14,6 +17,7 @@ import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.mybatis.dynamic.sql.SqlBuilder; import org.springframework.stereotype.Service; @@ -25,8 +29,30 @@ import java.util.List; @RequiredArgsConstructor public class LocationRecordServiceImpl implements LocationRecordService{ private final LocationRecordMapper locationRecordMapper; + + private RuntimeException checkClaims(Claims claims){ + if(claims == null){ + return new RuntimeException("无效的身份令牌"); + } + + String userId = claims.getUserId(); + if (StringUtils.isEmpty(userId)) { + return new RuntimeException("无效的用户Id"); + } + + return null; + } + @Override - public ServiceResult> getLocationRecord(LocationRecordParams params, String userId) { + public ServiceResult> getLocationRecord(LocationRecordParams params, Claims claims) { + ServiceResult.ServiceResultBuilder> result = ServiceResult.builder(); + Exception exception = checkClaims(claims); + if (exception != null){ + return result.exception(exception.getMessage()).build(); + } + + String userId = claims.getUserId(); + List recordList = locationRecordMapper.select((s)-> s.applyWhere(dsl -> { if (params.getStartTime() != null) { dsl.and(LocationRecordDynamicSqlSupport.locationTime, SqlBuilder.isGreaterThanOrEqualTo(params.getStartTime())); @@ -38,19 +64,17 @@ public class LocationRecordServiceImpl implements LocationRecordService{ dsl.and(LocationRecordDynamicSqlSupport.userId, SqlBuilder.isEqualTo(Long.valueOf(userId))); dsl.and(LocationRecordDynamicSqlSupport.id, SqlBuilder.isNotNull()); - }).orderBy((LocationRecordDynamicSqlSupport.id))); + }).orderBy(LocationRecordDynamicSqlSupport.locationTime, LocationRecordDynamicSqlSupport.id)); - return ServiceResult.>builder() - .result(recordList) - .build(); + return result.result(recordList).build(); } @Override - public ServiceResult> getPageLocationRecord(PageLocationRecordParams params, String userId) { + public ServiceResult> getPageLocationRecord(PageLocationRecordParams params, Claims claims) { PageInfo pageInfo; try(Page page = PageHelper.startPage(params.getPage(),params.getSize())){ pageInfo = page.doSelectPageInfo(()->{ - getLocationRecord(params, userId); + getLocationRecord(params, claims); }); } @@ -58,4 +82,19 @@ public class LocationRecordServiceImpl implements LocationRecordService{ .result(pageInfo) .build(); } + + @Override + public ServiceResult postLocationRecord(LocationRecordDto locationRecordDto, Claims claims) throws Exception { + Exception exception = checkClaims(claims); + if(exception != null){ + throw exception; + } + + LocationRecord dao = LocationRecordConvertor.INSTANCE.dtoToDao(locationRecordDto); + dao.setId(IdUtil.getSnowflakeNextIdStr()); + dao.setUserId(Long.valueOf(claims.getUserId())); + + locationRecordMapper.insert(dao); + return ServiceResult.builder().build(); + } }