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();
+ }
}