From 2386300f1ed591e6c46b7f32539cac7f2fd7d434 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 18 七月 2023 08:58:31 +0800
Subject: [PATCH] 更新预约场地部分接口
---
cloud-server-other/src/main/java/com/dsh/other/util/GeodesyUtil.java | 63 +++
cloud-server-competition/src/main/java/com/dsh/competition/model/CompetitionListVo.java | 2
cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteTypeServiceImpl.java | 39 ++
cloud-server-competition/src/main/java/com/dsh/competition/service/impl/ParticipantServiceImpl.java | 1
cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java | 95 +++++
cloud-server-other/pom.xml | 6
cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java | 4
cloud-server-competition/src/main/java/com/dsh/competition/model/ParticipantVo.java | 2
cloud-server-other/src/main/java/com/dsh/other/entity/Site.java | 5
cloud-server-competition/src/main/java/com/dsh/competition/model/CompetitionInfo.java | 10
cloud-server-other/src/main/java/com/dsh/other/mapper/SiteTypeMapper.java | 11
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/PermissionsFilter.java | 28
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/ResponseParamFilter.java | 160 +++++-----
cloud-server-other/src/main/resources/mapper/SiteMapper.xml | 29 +
cloud-server-competition/src/main/java/com/dsh/competition/entity/Competition.java | 17
cloud-server-other/src/main/java/com/dsh/other/mapper/SiteMapper.java | 13
cloud-server-other/src/main/resources/mapper/SiteTypeMapper.xml | 6
cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteList.java | 32 ++
cloud-server-other/src/main/java/com/dsh/other/service/ISiteService.java | 34 ++
cloud-server-competition/src/main/resources/mapper/PaymentCompetitionMapper.xml | 3
cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java | 18
cloud-server-other/src/main/java/com/dsh/other/service/ISiteTypeService.java | 22 +
cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteListVo.java | 34 ++
cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java | 126 +++++++
cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteInfoVo.java | 34 ++
cloud-server-competition/src/main/java/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.java | 10
cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteTimes.java | 18 +
cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/WrapperResponseGlobalFilter.java | 118 +++---
cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java | 6
29 files changed, 752 insertions(+), 194 deletions(-)
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java b/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java
index c9928e0..ff6b4dc 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java
@@ -115,8 +115,8 @@
PurchaseRecordVo recordVo = new PurchaseRecordVo();
recordVo.setPurchaseType("报名赛事");
recordVo.setPurchaseTime(dateFormat.format(coms.getInsertTime()));
- Competition competition = cttService.getById(coms.getCompetitionId());
- recordVo.setPurchaseAmount("-"+competition.getPrice());
+ PaymentCompetition paymentCompetition = paymentCompetitionService.getById(coms.getPaymentCompetitionId());
+ recordVo.setPurchaseAmount("-"+paymentCompetition.getAmount());
recordVos.add(recordVo);
});
}
@@ -274,7 +274,7 @@
@PostMapping("/api/competition/queryMyCompetitionList")
@ApiOperation(value = "获取已报名赛事列表", tags = {"APP-赛事活动列表"})
@ApiImplicitParams({
- @ApiImplicitParam(value = "类型(1=未开始,2=进行中,3=已结束,4=已取消)", name = "type", dataType = "int", required = true),
+ @ApiImplicitParam(value = "类型(0=全部,1=未开始,2=进行中,3=已结束,4=已取消)", name = "type", dataType = "int", required = true),
@ApiImplicitParam(value = "页码,首页1", name = "pageSize", dataType = "int", required = true),
@ApiImplicitParam(value = "页条数", name = "pageNo", dataType = "int", required = true),
@ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/entity/Competition.java b/cloud-server-competition/src/main/java/com/dsh/competition/entity/Competition.java
index a7f2055..b2b5548 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/entity/Competition.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/entity/Competition.java
@@ -95,15 +95,20 @@
@TableField("endAge")
private Integer endAge;
/**
- * 支付方式(1=现金,2=玩湃币支付,3=课时支付)
+ * 现金支付价格
*/
- @TableField("payType")
- private Integer payType;
+ @TableField("cashPrice")
+ private Double cashPrice;
/**
- * 支付金额
+ * 玩湃币支付价格
*/
- @TableField("price")
- private BigDecimal price;
+ @TableField("playPaiCoin")
+ private Integer playPaiCoin;
+ /**
+ * 课时支付价格
+ */
+ @TableField("classPrice")
+ private Integer classPrice;
/**
* 参加地址
*/
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/model/CompetitionInfo.java b/cloud-server-competition/src/main/java/com/dsh/competition/model/CompetitionInfo.java
index 4bf4f7b..28c3d75 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/model/CompetitionInfo.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/model/CompetitionInfo.java
@@ -47,10 +47,12 @@
private String city;
@ApiModelProperty("参赛地址")
private String address;
- @ApiModelProperty("支付方式(1=现金,2=玩湃币支付,3=课时支付)")
- private Integer payType;
- @ApiModelProperty("支付价格")
- private Double price;
+ @ApiModelProperty("现金支付价格")
+ private Double cashPrice;
+ @ApiModelProperty("玩湃币支付价格")
+ private Integer playPaiCoin;
+ @ApiModelProperty("课时支付价格")
+ private Integer classPrice;
@ApiModelProperty("赛事简介")
private String introduction;
@ApiModelProperty("报名须知")
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/model/CompetitionListVo.java b/cloud-server-competition/src/main/java/com/dsh/competition/model/CompetitionListVo.java
index 3e6c6e5..81623bc 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/model/CompetitionListVo.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/model/CompetitionListVo.java
@@ -29,4 +29,6 @@
private String age;
@ApiModelProperty("热度")
private Integer heat;
+ @ApiModelProperty("状态(1=未开始,2=进行中,3=已结束,4=已取消)")
+ private Integer status;
}
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/model/ParticipantVo.java b/cloud-server-competition/src/main/java/com/dsh/competition/model/ParticipantVo.java
index ff64f22..31c3e12 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/model/ParticipantVo.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/model/ParticipantVo.java
@@ -19,6 +19,8 @@
private Integer age;
@ApiModelProperty("身份证号码")
private String idcard;
+ @ApiModelProperty("电话号码")
+ private String phone;
@ApiModelProperty("剩余课时")
private Integer residueClassHour;
}
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java b/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java
index 617d841..7f60938 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java
@@ -124,8 +124,9 @@
competitionInfo.setProvince(competition.getEntryProvince());
competitionInfo.setCity(competition.getEntryCity());
competitionInfo.setAddress(competition.getEntryAddress());
- competitionInfo.setPayType(competition.getPayType());
- competitionInfo.setPrice(competition.getPrice().doubleValue());
+ competitionInfo.setCashPrice(competition.getCashPrice());
+ competitionInfo.setPlayPaiCoin(competition.getPlayPaiCoin());
+ competitionInfo.setClassPrice(competition.getClassPrice());
competitionInfo.setIntroduction(competition.getIntroduction());
competitionInfo.setRegistrationNotes(competition.getRegistrationNotes());
competitionInfo.setApply(0);
@@ -168,13 +169,18 @@
AppUser appUser = appUserClient.queryAppUser(uid);
String[] split = paymentCompetitionVo.getIds().split(";");
Competition competition = this.getById(paymentCompetitionVo.getId());
- BigDecimal money = competition.getPrice().multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN);
+ BigDecimal money = null;
+ if(paymentCompetitionVo.getPayType() == 1 || paymentCompetitionVo.getPayType() == 2){
+ money = new BigDecimal(competition.getCashPrice()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN);
+ }
if(paymentCompetitionVo.getPayType() == 3){//玩湃币
+ money = new BigDecimal(competition.getPlayPaiCoin()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN);
if(money.compareTo(new BigDecimal(appUser.getPlayPaiCoins())) > 0){
return ResultUtil.error("报名失败,玩湃币不足,请充值");
}
}
if(paymentCompetitionVo.getPayType() == 4){//课程
+ money = new BigDecimal(competition.getClassPrice()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN);
for (String s : split) {
Participant participant = participantService.getById(s);
Student student = studentClient.queryStudentByPhone(participant.getPhone());
@@ -182,7 +188,7 @@
return ResultUtil.error(participant.getName() + "不是学员,无法使用课时支付。");
}
Integer integer = coursePackagePaymentClient.queryResidueClassHour(student.getId());
- if(new BigDecimal(integer).compareTo(competition.getPrice()) < 0){
+ if(new BigDecimal(integer).compareTo(new BigDecimal(competition.getClassPrice())) < 0){
return ResultUtil.error(participant.getName() + "剩余课时不足,无法完成支付。");
}
}
@@ -195,7 +201,7 @@
paymentCompetition.setCompetitionId(paymentCompetitionVo.getId());
paymentCompetition.setAppUserId(uid);
paymentCompetition.setPayType(paymentCompetitionVo.getPayType());
- paymentCompetition.setAmount(competition.getPrice().multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue());
+ paymentCompetition.setAmount(money.doubleValue());
paymentCompetition.setPayStatus(1);
paymentCompetition.setInsertTime(new Date());
paymentCompetitionService.save(paymentCompetition);
@@ -234,7 +240,7 @@
Student student = studentClient.queryStudentByPhone(participant.getPhone());
PaymentDeductionClassHour paymentDeductionClassHour = new PaymentDeductionClassHour();
paymentDeductionClassHour.setId(student.getId());
- paymentDeductionClassHour.setClassHour(competition.getPrice().intValue());
+ paymentDeductionClassHour.setClassHour(competition.getClassPrice());
paymentDeductionClassHour.setCode(code);
coursePackagePaymentClient.paymentDeductionClassHour(paymentDeductionClassHour);
}
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/ParticipantServiceImpl.java b/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/ParticipantServiceImpl.java
index 14bb0d3..f1947c1 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/ParticipantServiceImpl.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/ParticipantServiceImpl.java
@@ -96,6 +96,7 @@
}else{
participantVo.setResidueClassHour(0);
}
+ participantVo.setPhone(participant.getPhone());
listVo.add(participantVo);
}
return listVo;
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.java b/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.java
index c2e3036..779a7b7 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.java
@@ -82,6 +82,9 @@
@Override
public List<CompetitionListVo> queryMyCompetitionList(Integer uid, Integer type, Integer pageSize, Integer pageNo) throws Exception {
pageSize = (pageSize - 1) * pageNo;
+ if(0 == type){
+ type = null;
+ }
return this.baseMapper.queryMyCompetitionList(uid, type, pageSize, pageNo);
}
@@ -115,8 +118,9 @@
competitionInfo.setProvince(competition.getEntryProvince());
competitionInfo.setCity(competition.getEntryCity());
competitionInfo.setAddress(competition.getEntryAddress());
- competitionInfo.setPayType(competition.getPayType());
- competitionInfo.setPrice(competition.getPrice().doubleValue());
+ competitionInfo.setCashPrice(competition.getCashPrice());
+ competitionInfo.setPlayPaiCoin(competition.getPlayPaiCoin());
+ competitionInfo.setClassPrice(competition.getClassPrice());
competitionInfo.setIntroduction(competition.getIntroduction());
competitionInfo.setRegistrationNotes(competition.getRegistrationNotes());
competitionInfo.setApply(1);
@@ -208,7 +212,7 @@
Student student = studentClient.queryStudentByPhone(participant.getPhone());
PaymentDeductionClassHour paymentDeductionClassHour = new PaymentDeductionClassHour();
paymentDeductionClassHour.setId(student.getId());
- paymentDeductionClassHour.setClassHour(competition.getPrice().intValue());
+ paymentDeductionClassHour.setClassHour(competition.getClassPrice());
paymentDeductionClassHour.setCode(code);
coursePackagePaymentClient.rollbackPaymentDeductionClassHour(paymentDeductionClassHour);
}
diff --git a/cloud-server-competition/src/main/resources/mapper/PaymentCompetitionMapper.xml b/cloud-server-competition/src/main/resources/mapper/PaymentCompetitionMapper.xml
index f702dc2..a897e11 100644
--- a/cloud-server-competition/src/main/resources/mapper/PaymentCompetitionMapper.xml
+++ b/cloud-server-competition/src/main/resources/mapper/PaymentCompetitionMapper.xml
@@ -13,7 +13,8 @@
b.introduction,
DATE_FORMAT(b.registerEndTime, '%Y-%m-%d %H:%i') as registerEndTime,
CONCAT(b.startAge, '-', b.endAge) as age,
- b.baseNumber + b.applicantsNumber as heat
+ b.baseNumber + b.applicantsNumber as heat,
+ if(a.payStatus = 3, 4, b.status) as status
from t_payment_competition a
left join t_competition b on (a.competitionId = b.id)
where a.state = 1 and a.appUserId = #{uid} and a.payStatus != 1
diff --git a/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/PermissionsFilter.java b/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/PermissionsFilter.java
index 9f57bd6..3bb745e 100644
--- a/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/PermissionsFilter.java
+++ b/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/PermissionsFilter.java
@@ -173,20 +173,20 @@
}
//校验参数签名 Verify parameter signature
- ResultUtil resultUtil = preHandle(request);
- if(resultUtil.getCode() != 200){
- log.info("签名异常");
- response.setRawStatusCode(resultUtil.getCode());
- byte[] bits = JSON.toJSONBytes(resultUtil);
- DataBuffer buffer = response.bufferFactory().wrap(bits);
- HttpHeaders headers = response.getHeaders();
- String first = headers.getFirst("Content-Type");
- if(StringUtils.isEmpty(first)){
- headers.add("Content-Type", "application/json;charset=UTF-8");
- }
-
- return response.writeWith(Mono.just(buffer));
- }
+// ResultUtil resultUtil = preHandle(request);
+// if(resultUtil.getCode() != 200){
+// log.info("签名异常");
+// response.setRawStatusCode(resultUtil.getCode());
+// byte[] bits = JSON.toJSONBytes(resultUtil);
+// DataBuffer buffer = response.bufferFactory().wrap(bits);
+// HttpHeaders headers = response.getHeaders();
+// String first = headers.getFirst("Content-Type");
+// if(StringUtils.isEmpty(first)){
+// headers.add("Content-Type", "application/json;charset=UTF-8");
+// }
+//
+// return response.writeWith(Mono.just(buffer));
+// }
return chain.filter(exchange.mutate().request(request.mutate().build()).build());
}
diff --git a/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/ResponseParamFilter.java b/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/ResponseParamFilter.java
index a1873f1..da13e85 100644
--- a/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/ResponseParamFilter.java
+++ b/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/ResponseParamFilter.java
@@ -1,80 +1,80 @@
-//package cn.mb.cloud.gateway.filter;
-//
-//import com.alibaba.fastjson.JSON;
-//import lombok.extern.slf4j.Slf4j;
-//import org.reactivestreams.Publisher;
-//import org.springframework.cloud.gateway.filter.GatewayFilterChain;
-//import org.springframework.cloud.gateway.filter.GlobalFilter;
-//import org.springframework.core.Ordered;
-//import org.springframework.core.io.buffer.DataBuffer;
-//import org.springframework.core.io.buffer.DataBufferFactory;
-//import org.springframework.core.io.buffer.DataBufferUtils;
-//import org.springframework.http.HttpStatus;
-//import org.springframework.http.server.reactive.ServerHttpRequest;
-//import org.springframework.http.server.reactive.ServerHttpResponse;
-//import org.springframework.http.server.reactive.ServerHttpResponseDecorator;
-//import org.springframework.stereotype.Component;
-//import org.springframework.web.server.ServerWebExchange;
-//import reactor.core.publisher.Flux;
-//import reactor.core.publisher.Mono;
-//
-//import java.nio.charset.StandardCharsets;
-//import java.util.ArrayList;
-//import java.util.List;
-//
-///**
-// * 日志拦截器
-// */
-//@Slf4j
-//@Component
-//public class ResponseParamFilter implements GlobalFilter, Ordered {
-//
-// @Override
-// public int getOrder() {
-// return -1;
-// }
-//
-// @Override
-// public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
-// try {
-// ServerHttpRequest request = exchange.getRequest();
-// String uri = request.getURI().getRawPath();
-// ServerHttpResponse originalResponse = exchange.getResponse();
-// DataBufferFactory bufferFactory = originalResponse.bufferFactory();
-// HttpStatus statusCode = originalResponse.getStatusCode();
-// if(statusCode == HttpStatus.OK){
-// ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) {
-// @Override
-// public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
-// if (body instanceof Flux) {
-// Flux<? extends DataBuffer> fluxBody = Flux.from(body);
-// return super.writeWith(fluxBody.map(dataBuffer -> {
-// byte[] content = new byte[dataBuffer.readableByteCount()];
-// dataBuffer.read(content);
-// DataBufferUtils.release(dataBuffer);//释放掉内存 Release memory
-// // 构建日志 build Journal
-// StringBuffer sb = new StringBuffer();
-// sb.append(" 响应操作 -> " + uri + " || 响应参数-> {} \n");
-//
-// List<Object> rspArgs = new ArrayList<>();
-// rspArgs.add(originalResponse.getStatusCode());
-// String data = new String(content, StandardCharsets.UTF_8);//data
-// sb.append(data);
-// log.info(sb.toString(), rspArgs.toArray());
-// return bufferFactory.wrap(content);
-// }));
-// } else {
-// log.error("响应操作 -> " + uri + " || 响应参数-> {} \n", getStatusCode());
-// }
-// return super.writeWith(body);
-// }
-// };
-// return chain.filter(exchange.mutate().response(decoratedResponse).build());
-// }
-// return chain.filter(exchange);//降级处理返回数据 Downgrade processing returns data
-// }catch (Exception e){
-// log.error("gateway log exception.\n" + e);
-// return chain.filter(exchange);
-// }
-// }
-//}
+package cn.mb.cloud.gateway.filter;
+
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.reactivestreams.Publisher;
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.core.Ordered;
+import org.springframework.core.io.buffer.DataBuffer;
+import org.springframework.core.io.buffer.DataBufferFactory;
+import org.springframework.core.io.buffer.DataBufferUtils;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.http.server.reactive.ServerHttpResponse;
+import org.springframework.http.server.reactive.ServerHttpResponseDecorator;
+import org.springframework.stereotype.Component;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 日志拦截器
+ */
+@Slf4j
+@Component
+public class ResponseParamFilter implements GlobalFilter, Ordered {
+
+ @Override
+ public int getOrder() {
+ return -1;
+ }
+
+ @Override
+ public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+ try {
+ ServerHttpRequest request = exchange.getRequest();
+ String uri = request.getURI().getRawPath();
+ ServerHttpResponse originalResponse = exchange.getResponse();
+ DataBufferFactory bufferFactory = originalResponse.bufferFactory();
+ HttpStatus statusCode = originalResponse.getStatusCode();
+ if(statusCode == HttpStatus.OK){
+ ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) {
+ @Override
+ public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
+ if (body instanceof Flux) {
+ Flux<? extends DataBuffer> fluxBody = Flux.from(body);
+ return super.writeWith(fluxBody.map(dataBuffer -> {
+ byte[] content = new byte[dataBuffer.readableByteCount()];
+ dataBuffer.read(content);
+ DataBufferUtils.release(dataBuffer);//释放掉内存 Release memory
+ // 构建日志 build Journal
+ StringBuffer sb = new StringBuffer();
+ sb.append(" 响应操作 -> " + uri + " || 响应参数-> {} \n");
+
+ List<Object> rspArgs = new ArrayList<>();
+ rspArgs.add(originalResponse.getStatusCode());
+ String data = new String(content, StandardCharsets.UTF_8);//data
+ sb.append(data);
+ log.info(sb.toString(), rspArgs.toArray());
+ return bufferFactory.wrap(content);
+ }));
+ } else {
+ log.error("响应操作 -> " + uri + " || 响应参数-> {} \n", getStatusCode());
+ }
+ return super.writeWith(body);
+ }
+ };
+ return chain.filter(exchange.mutate().response(decoratedResponse).build());
+ }
+ return chain.filter(exchange);//降级处理返回数据 Downgrade processing returns data
+ }catch (Exception e){
+ log.error("gateway log exception.\n" + e);
+ return chain.filter(exchange);
+ }
+ }
+}
diff --git a/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/WrapperResponseGlobalFilter.java b/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/WrapperResponseGlobalFilter.java
index 11c37aa..f0969ab 100644
--- a/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/WrapperResponseGlobalFilter.java
+++ b/cloud-server-gateway/src/main/java/cn/mb/cloud/gateway/filter/WrapperResponseGlobalFilter.java
@@ -1,60 +1,58 @@
-//package cn.mb.cloud.gateway.filter;
-//
-//import lombok.extern.slf4j.Slf4j;
-//import org.springframework.cloud.gateway.filter.GatewayFilterChain;
-//import org.springframework.cloud.gateway.filter.GlobalFilter;
-//import org.springframework.core.Ordered;
-//import org.springframework.core.io.buffer.*;
-//import org.springframework.http.HttpMethod;
-//import org.springframework.http.MediaType;
-//import org.springframework.http.server.reactive.ServerHttpRequest;
-//import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
-//import org.springframework.http.server.reactive.ServerHttpResponse;
-//import org.springframework.stereotype.Component;
-//import org.springframework.web.server.ServerWebExchange;
-//import reactor.core.publisher.Flux;
-//import reactor.core.publisher.Mono;
-//
-//import java.nio.charset.StandardCharsets;
-//import java.util.Set;
-//
-//
-//@Slf4j
-//@Component
-//public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered {
-//
-// @Override
-// public int getOrder() {
-// return Ordered.HIGHEST_PRECEDENCE;
-// }
-//
-// @Override
-// public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
-// ServerHttpRequest req = exchange.getRequest();
-// ServerHttpResponse res = exchange.getResponse();
-// String method = req.getMethodValue();
-// MediaType ct = req.getHeaders().getContentType();
-// if (HttpMethod.POST.matches(method)) {
-// return DataBufferUtils.join(req.getBody()).flatMap(dataBuffer -> {
-// byte[] bytes = new byte[dataBuffer.readableByteCount()];
-// dataBuffer.read(bytes);
-//// String bodyStr = new String(bytes, StandardCharsets.UTF_8);
-//// exchange.getAttributes().put("POST_BODY", bodyStr);
-// DataBufferUtils.release(dataBuffer);
-// Flux<DataBuffer> cachedFlux = Flux.defer(() -> {
-// DataBuffer buffer = res.bufferFactory().wrap(bytes);
-// return Mono.just(buffer);
-// });
-// ServerHttpRequest mutateReq = new ServerHttpRequestDecorator(req) {
-// @Override
-// public Flux<DataBuffer> getBody() {
-// return cachedFlux;
-// }
-// };
-// return chain.filter(exchange.mutate().request(mutateReq).build());
-// });
-// }
-// return chain.filter(exchange);
-// }
-//
-//}
+package cn.mb.cloud.gateway.filter;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.core.Ordered;
+import org.springframework.core.io.buffer.*;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.MediaType;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
+import org.springframework.http.server.reactive.ServerHttpResponse;
+import org.springframework.stereotype.Component;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+
+
+@Slf4j
+@Component
+public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered {
+
+ @Override
+ public int getOrder() {
+ return Ordered.HIGHEST_PRECEDENCE;
+ }
+
+ @Override
+ public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+ ServerHttpRequest req = exchange.getRequest();
+ ServerHttpResponse res = exchange.getResponse();
+ String method = req.getMethodValue();
+ MediaType ct = req.getHeaders().getContentType();
+ if (HttpMethod.POST.matches(method)) {
+ return DataBufferUtils.join(req.getBody()).flatMap(dataBuffer -> {
+ byte[] bytes = new byte[dataBuffer.readableByteCount()];
+ dataBuffer.read(bytes);
+// String bodyStr = new String(bytes, StandardCharsets.UTF_8);
+// exchange.getAttributes().put("POST_BODY", bodyStr);
+ DataBufferUtils.release(dataBuffer);
+ Flux<DataBuffer> cachedFlux = Flux.defer(() -> {
+ DataBuffer buffer = res.bufferFactory().wrap(bytes);
+ return Mono.just(buffer);
+ });
+ ServerHttpRequest mutateReq = new ServerHttpRequestDecorator(req) {
+ @Override
+ public Flux<DataBuffer> getBody() {
+ return cachedFlux;
+ }
+ };
+ return chain.filter(exchange.mutate().request(mutateReq).build());
+ });
+ }
+ return chain.filter(exchange);
+ }
+
+}
diff --git a/cloud-server-other/pom.xml b/cloud-server-other/pom.xml
index 641aa9b..380ddf5 100644
--- a/cloud-server-other/pom.xml
+++ b/cloud-server-other/pom.xml
@@ -91,7 +91,11 @@
<artifactId>httpmime</artifactId>
<version>4.5.2</version>
</dependency>
-
+ <dependency>
+ <groupId>org.gavaghan</groupId>
+ <artifactId>geodesy</artifactId>
+ <version>1.1.3</version>
+ </dependency>
</dependencies>
<build>
diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java
index ea53bbb..ff84b6c 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java
@@ -1,10 +1,16 @@
package com.dsh.other.controller;
-import com.dsh.other.model.BaseVo;
+import com.dsh.other.model.*;
import com.dsh.other.service.ISiteService;
+import com.dsh.other.service.ISiteTypeService;
import com.dsh.other.util.ResultUtil;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@@ -20,17 +26,78 @@
@Autowired
private ISiteService siteService;
-// @Autowired
-// private
-//
-//
-//
-// public ResultUtil<List<BaseVo>> querySiteType(){
-// try {
-//
-// }catch (Exception e){
-// e.printStackTrace();
-// return ResultUtil.runErr();
-// }
-// }
+ @Autowired
+ private ISiteTypeService siteTypeService;
+
+
+
+
+ @ResponseBody
+ @PostMapping("/base/site/querySiteType")
+ @ApiOperation(value = "获取场地类型", tags = {"用户—预约场地"})
+ @ApiImplicitParams({
+ })
+ public ResultUtil<List<BaseVo>> querySiteType(){
+ try {
+ List<BaseVo> list = siteTypeService.querySiteType();
+ return ResultUtil.success(list);
+ }catch (Exception e){
+ e.printStackTrace();
+ return ResultUtil.runErr();
+ }
+ }
+
+
+ @ResponseBody
+ @PostMapping("/base/site/querySiteList")
+ @ApiOperation(value = "获取场地列表", tags = {"用户—预约场地"})
+ @ApiImplicitParams({
+ })
+ public ResultUtil<List<QuerySiteListVo>> querySiteList(QuerySiteList querySiteList){
+ try {
+ List<QuerySiteListVo> querySiteListVos = siteService.querySiteList(querySiteList);
+ return ResultUtil.success(querySiteListVos);
+ }catch (Exception e){
+ e.printStackTrace();
+ return ResultUtil.runErr();
+ }
+ }
+
+
+
+
+ @ResponseBody
+ @PostMapping("/base/site/querySiteInfo")
+ @ApiOperation(value = "获取场地详情", tags = {"用户—预约场地"})
+ @ApiImplicitParams({
+ @ApiImplicitParam(value = "场地id", name = "id", dataType = "int", required = true),
+ })
+ public ResultUtil<QuerySiteInfoVo> querySiteInfo(Integer id){
+ try {
+ QuerySiteInfoVo querySiteInfoVo = siteService.querySiteInfo(id);
+ return ResultUtil.success(querySiteInfoVo);
+ }catch (Exception e){
+ e.printStackTrace();
+ return ResultUtil.runErr();
+ }
+ }
+
+
+
+ @ResponseBody
+ @PostMapping("/base/site/querySiteTimes")
+ @ApiOperation(value = "获取场地详情时间段数据", tags = {"用户—预约场地"})
+ @ApiImplicitParams({
+ @ApiImplicitParam(value = "场地id", name = "id", dataType = "int", required = true),
+ @ApiImplicitParam(value = "日期(2023-01-01)", name = "day", dataType = "string", required = true),
+ })
+ public ResultUtil<List<QuerySiteTimes>> querySiteTimes(Integer id, String day){
+ try {
+ List<QuerySiteTimes> list = siteService.querySiteTimes(id, day);
+ return ResultUtil.success(list);
+ }catch (Exception e){
+ e.printStackTrace();
+ return ResultUtil.runErr();
+ }
+ }
}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java
index 90cf2e4..5f79410 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java
@@ -148,7 +148,7 @@
@ResponseBody
@PostMapping("/base/store/queryStoreLists")
- @ApiOperation(value = "获取门店列表", tags = {"APP-加入玩湃", "APP-课程列表"})
+ @ApiOperation(value = "获取门店列表", tags = {"APP-加入玩湃", "APP-课程列表", "用户—预约场地"})
@ApiImplicitParams({
@ApiImplicitParam(value = "经纬", name = "lon", dataType = "string", required = false),
@ApiImplicitParam(value = "纬度", name = "lat", dataType = "string", required = false),
@@ -244,7 +244,7 @@
@ResponseBody
@PostMapping("/base/store/queryAllCity")
- @ApiOperation(value = "获取所有开通城市", tags = {"APP-赛事活动列表"})
+ @ApiOperation(value = "获取所有开通城市", tags = {"APP-赛事活动列表", "用户—预约场地"})
@ApiImplicitParams({
})
public ResultUtil<List<ProvinceAndCityVo>> queryAllCity(){
diff --git a/cloud-server-other/src/main/java/com/dsh/other/entity/Site.java b/cloud-server-other/src/main/java/com/dsh/other/entity/Site.java
index f6810d7..ab00eb1 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/entity/Site.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/entity/Site.java
@@ -100,5 +100,10 @@
*/
@TableField("state")
private Integer state;
+ /**
+ * 添加时间
+ */
+ @TableField("insertTime")
+ private Date insertTime;
}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/mapper/SiteMapper.java b/cloud-server-other/src/main/java/com/dsh/other/mapper/SiteMapper.java
index d29d99d..fbd1db9 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/mapper/SiteMapper.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/mapper/SiteMapper.java
@@ -2,10 +2,23 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.other.entity.Site;
+import com.dsh.other.model.QuerySiteList;
+import com.dsh.other.model.QuerySiteListVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
/**
* @author zhibing.pu
* @date 2023/7/13 16:10
*/
public interface SiteMapper extends BaseMapper<Site> {
+
+
+ /**
+ * 获取场地列表
+ * @param querySiteList
+ * @return
+ */
+ List<QuerySiteListVo> querySiteList(@Param("item") QuerySiteList querySiteList);
}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/mapper/SiteTypeMapper.java b/cloud-server-other/src/main/java/com/dsh/other/mapper/SiteTypeMapper.java
new file mode 100644
index 0000000..05ff45e
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/mapper/SiteTypeMapper.java
@@ -0,0 +1,11 @@
+package com.dsh.other.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dsh.other.entity.SiteType;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/17 10:58
+ */
+public interface SiteTypeMapper extends BaseMapper<SiteType> {
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteInfoVo.java b/cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteInfoVo.java
new file mode 100644
index 0000000..ff746ea
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteInfoVo.java
@@ -0,0 +1,34 @@
+package com.dsh.other.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/17 11:49
+ */
+@Data
+@ApiModel
+public class QuerySiteInfoVo {
+ @ApiModelProperty("场地id")
+ private Integer id;
+ @ApiModelProperty("场地名称")
+ private String name;
+ @ApiModelProperty("场地类型名称")
+ private String siteTypeName;
+ @ApiModelProperty("门店名称")
+ private String storeName;
+ @ApiModelProperty("门店地址")
+ private String storeAddress;
+ @ApiModelProperty("门店经度")
+ private String storeLon;
+ @ApiModelProperty("门店纬度")
+ private String storeLat;
+ @ApiModelProperty("门店电话")
+ private String storePhone;
+ @ApiModelProperty("现金价格(x/半小时)")
+ private Double cashPrice;
+ @ApiModelProperty("玩湃币价格(x/半小时)")
+ private Integer playPaiCoin;
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteList.java b/cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteList.java
new file mode 100644
index 0000000..beaf01a
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteList.java
@@ -0,0 +1,32 @@
+package com.dsh.other.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/17 11:20
+ */
+@Data
+@ApiModel
+public class QuerySiteList {
+ @ApiModelProperty(value = "预约开始时间(10:00)", required = false, dataType = "String")
+ private String startTime;
+ @ApiModelProperty(value = "预约结束时间(12:00)", required = false, dataType = "String")
+ private String endTime;
+ @ApiModelProperty(value = "场地类型id", required = false, dataType = "int")
+ private Integer siteTypeId;
+ @ApiModelProperty(value = "所在城市code", required = false, dataType = "String")
+ private String cityCode;
+ @ApiModelProperty(value = "所在门店id", required = false, dataType = "int")
+ private Integer storeId;
+ @ApiModelProperty(value = "页码,首页1", required = true, dataType = "int")
+ private Integer pageNum;
+ @ApiModelProperty(value = "页条数", required = true, dataType = "int")
+ private Integer pageSize;
+ @ApiModelProperty(value = "当前经度", required = true, dataType = "String")
+ private String lon;
+ @ApiModelProperty(value = "当前纬度", required = true, dataType = "String")
+ private String lat;
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteListVo.java b/cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteListVo.java
new file mode 100644
index 0000000..0e7cff5
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteListVo.java
@@ -0,0 +1,34 @@
+package com.dsh.other.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/17 11:25
+ */
+@Data
+@ApiModel
+public class QuerySiteListVo {
+ @ApiModelProperty("场地id")
+ private Integer id;
+ @ApiModelProperty("场地名称")
+ private String name;
+ @ApiModelProperty("场地类型名称")
+ private String siteTypeName;
+ @ApiModelProperty("门店名称")
+ private String storeName;
+ @ApiModelProperty("门店地址")
+ private String storeAddress;
+ @ApiModelProperty("门店经度")
+ private String storeLon;
+ @ApiModelProperty("门店纬度")
+ private String storeLat;
+ @ApiModelProperty("距离")
+ private Double distance;
+ @ApiModelProperty("可预约时间段")
+ private String times;
+ @ApiModelProperty("预约价格")
+ private Double price;
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteTimes.java b/cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteTimes.java
new file mode 100644
index 0000000..5753149
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/model/QuerySiteTimes.java
@@ -0,0 +1,18 @@
+package com.dsh.other.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/17 17:24
+ */
+@Data
+@ApiModel
+public class QuerySiteTimes {
+ @ApiModelProperty("时间段")
+ private String time;
+ @ApiModelProperty("是否可选(0=否,1=是)")
+ private int selectable;
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/ISiteService.java b/cloud-server-other/src/main/java/com/dsh/other/service/ISiteService.java
index c239b6f..3a65679 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/service/ISiteService.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/service/ISiteService.java
@@ -2,10 +2,44 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.other.entity.Site;
+import com.dsh.other.model.QuerySiteInfoVo;
+import com.dsh.other.model.QuerySiteList;
+import com.dsh.other.model.QuerySiteListVo;
+import com.dsh.other.model.QuerySiteTimes;
+
+import java.util.List;
/**
* @author zhibing.pu
* @date 2023/7/13 16:10
*/
public interface ISiteService extends IService<Site> {
+
+
+ /**
+ * 获取场地列表
+ * @param querySiteList
+ * @return
+ * @throws Exception
+ */
+ List<QuerySiteListVo> querySiteList(QuerySiteList querySiteList) throws Exception;
+
+
+ /**
+ * 获取场地详情
+ * @param id
+ * @return
+ * @throws Exception
+ */
+ QuerySiteInfoVo querySiteInfo(Integer id) throws Exception;
+
+
+ /**
+ * 获取场地预约日期数据
+ * @param id
+ * @param day
+ * @return
+ * @throws Exception
+ */
+ List<QuerySiteTimes> querySiteTimes(Integer id, String day) throws Exception;
}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/ISiteTypeService.java b/cloud-server-other/src/main/java/com/dsh/other/service/ISiteTypeService.java
new file mode 100644
index 0000000..6560fd3
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/service/ISiteTypeService.java
@@ -0,0 +1,22 @@
+package com.dsh.other.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.dsh.other.entity.SiteType;
+import com.dsh.other.model.BaseVo;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/17 10:58
+ */
+public interface ISiteTypeService extends IService<SiteType> {
+
+
+ /**
+ * 获取场地分类
+ * @return
+ * @throws Exception
+ */
+ List<BaseVo> querySiteType() throws Exception;
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java b/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
index 26cdfc0..9b6a244 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
@@ -1,10 +1,28 @@
package com.dsh.other.service.impl;
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.other.entity.Site;
+import com.dsh.other.entity.SiteBooking;
+import com.dsh.other.entity.SiteType;
+import com.dsh.other.entity.Store;
import com.dsh.other.mapper.SiteMapper;
+import com.dsh.other.model.QuerySiteInfoVo;
+import com.dsh.other.model.QuerySiteList;
+import com.dsh.other.model.QuerySiteListVo;
+import com.dsh.other.model.QuerySiteTimes;
+import com.dsh.other.service.ISiteBookingService;
import com.dsh.other.service.ISiteService;
+import com.dsh.other.service.ISiteTypeService;
+import com.dsh.other.service.StoreService;
+import com.dsh.other.util.GeodesyUtil;
+import com.dsh.other.util.ToolUtil;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
/**
* @author zhibing.pu
@@ -12,4 +30,112 @@
*/
@Service
public class SiteServiceImpl extends ServiceImpl<SiteMapper, Site> implements ISiteService {
+
+ @Autowired
+ private ISiteTypeService siteTypeService;
+
+ @Autowired
+ private StoreService storeService;
+
+ @Autowired
+ private ISiteBookingService siteBookingService;
+
+
+
+
+
+ /**
+ * 获取场地列表
+ * @param querySiteList
+ * @return
+ * @throws Exception
+ */
+ @Override
+ public List<QuerySiteListVo> querySiteList(QuerySiteList querySiteList) throws Exception {
+ querySiteList.setPageNum((querySiteList.getPageNum() - 1) *querySiteList.getPageSize());
+ List<QuerySiteListVo> querySiteListVos = this.baseMapper.querySiteList(querySiteList);
+ for (QuerySiteListVo querySiteListVo : querySiteListVos) {
+ if(ToolUtil.isEmpty(querySiteList.getLon())){
+ querySiteListVo.setDistance(0D);
+ continue;
+ }
+ Map<String, Double> distance = GeodesyUtil.getDistance(querySiteList.getLon() + "," + querySiteList.getLat(), querySiteListVo.getStoreLon() + "," + querySiteListVo.getStoreLat());
+ querySiteListVo.setDistance(distance.get("WGS84"));
+ }
+ return querySiteListVos;
+ }
+
+
+ /**
+ * 获取场地详情
+ * @param id
+ * @return
+ * @throws Exception
+ */
+ @Override
+ public QuerySiteInfoVo querySiteInfo(Integer id) throws Exception {
+ Site site = this.getById(id);
+ SiteType siteType = siteTypeService.getById(site.getSiteTypeId());
+ Store store = storeService.getById(site.getStoreId());
+ QuerySiteInfoVo querySiteInfoVo = new QuerySiteInfoVo();
+ querySiteInfoVo.setId(site.getId());
+ querySiteInfoVo.setName(site.getName());
+ querySiteInfoVo.setSiteTypeName(siteType.getName());
+ querySiteInfoVo.setStoreName(store.getName());
+ querySiteInfoVo.setStoreAddress(store.getAddress());
+ querySiteInfoVo.setStoreLon(store.getLon());
+ querySiteInfoVo.setStoreLat(store.getLat());
+ querySiteInfoVo.setStorePhone(store.getPhone());
+ querySiteInfoVo.setCashPrice(site.getCashPrice());
+ querySiteInfoVo.setPlayPaiCoin(site.getPlayPaiCoin());
+ return querySiteInfoVo;
+ }
+
+
+ /**
+ * 获取场地预约日期数据
+ * @param id
+ * @param day
+ * @return
+ * @throws Exception
+ */
+ @Override
+ public List<QuerySiteTimes> querySiteTimes(Integer id, String day) throws Exception {
+ Site site = this.getById(id);
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+ Calendar s = Calendar.getInstance();
+ s.setTime(sdf.parse(day + " " + site.getAppointmentStartTime()));
+ Calendar e = Calendar.getInstance();
+ e.setTime(sdf.parse(day + " " + site.getAppointmentEndTime()));
+
+ int hour = e.get(Calendar.HOUR_OF_DAY);
+ int minute = e.get(Calendar.MINUTE);
+ List<QuerySiteTimes> list = new ArrayList<>();
+ while (true){
+ int s_hour = s.get(Calendar.HOUR_OF_DAY);
+ int s_minute = s.get(Calendar.MINUTE);
+ String start = s_hour + ":" + s_minute;
+
+ s.set(Calendar.MINUTE, s.get(Calendar.MINUTE) + 30);
+ int e_hour = s.get(Calendar.HOUR_OF_DAY);
+ int e_minute = s.get(Calendar.MINUTE);
+ String end = e_hour + ":" + e_minute;
+
+ QuerySiteTimes querySiteTimes = new QuerySiteTimes();
+ querySiteTimes.setTime(start + "-" + end);
+ querySiteTimes.setSelectable(1);
+
+ SiteBooking siteBooking = siteBookingService.getOne(new QueryWrapper<SiteBooking>().eq("siteId", id).eq("state", 1)
+ .in("status", Arrays.asList(3, 4, 5)).last(" and DATE_FORMAT(startTime, '%Y-%m-%d %H:%i') <= '" + day + " " + start + "' and DATE_FORMAT(endTime, '%Y-%m-%d %H:%i') >= '" + day + " " + end + "'"));
+ if(null != siteBooking){
+ querySiteTimes.setSelectable(0);
+ }
+ list.add(querySiteTimes);
+
+ if(e_hour == hour && minute == e_minute){
+ break;
+ }
+ }
+ return list;
+ }
}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteTypeServiceImpl.java b/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteTypeServiceImpl.java
new file mode 100644
index 0000000..1d059c2
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteTypeServiceImpl.java
@@ -0,0 +1,39 @@
+package com.dsh.other.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsh.other.entity.SiteType;
+import com.dsh.other.mapper.SiteTypeMapper;
+import com.dsh.other.model.BaseVo;
+import com.dsh.other.service.ISiteTypeService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/7/17 10:59
+ */
+@Service
+public class SiteTypeServiceImpl extends ServiceImpl<SiteTypeMapper, SiteType> implements ISiteTypeService {
+
+
+ /**
+ * 获取场地分类
+ * @return
+ * @throws Exception
+ */
+ @Override
+ public List<BaseVo> querySiteType() throws Exception {
+ List<SiteType> siteTypes = this.list(new QueryWrapper<SiteType>().eq("state", 1));
+ List<BaseVo> list = new ArrayList<>();
+ for (SiteType siteType : siteTypes) {
+ BaseVo baseVo = new BaseVo();
+ BeanUtils.copyProperties(siteType, baseVo);
+ list.add(baseVo);
+ }
+ return list;
+ }
+}
diff --git a/cloud-server-other/src/main/java/com/dsh/other/util/GeodesyUtil.java b/cloud-server-other/src/main/java/com/dsh/other/util/GeodesyUtil.java
new file mode 100644
index 0000000..9824ee6
--- /dev/null
+++ b/cloud-server-other/src/main/java/com/dsh/other/util/GeodesyUtil.java
@@ -0,0 +1,63 @@
+package com.dsh.other.util;
+
+import org.gavaghan.geodesy.Ellipsoid;
+import org.gavaghan.geodesy.GeodeticCalculator;
+import org.gavaghan.geodesy.GeodeticCurve;
+import org.gavaghan.geodesy.GlobalCoordinates;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 计算两个金纬度坐标之间的直线距离
+ */
+public class GeodesyUtil {
+
+
+ /**
+ * 获取直线距离
+ * @param fromLonLat
+ * @param toLonLat
+ * @return
+ */
+ public static Map<String, Double> getDistance(String fromLonLat, String toLonLat){
+ String[] from = fromLonLat.split(",");
+ String[] to = toLonLat.split(",");
+ GlobalCoordinates source = new GlobalCoordinates(Double.valueOf(from[1]), Double.valueOf(from[0]));
+ GlobalCoordinates target = new GlobalCoordinates(Double.valueOf(to[1]), Double.valueOf(to[0]));
+ double Sphere = getDistanceMeter(source, target, Ellipsoid.Sphere);
+ double WGS84 = getDistanceMeter(source, target, Ellipsoid.WGS84);
+ double GRS80 = getDistanceMeter(source, target, Ellipsoid.GRS80);
+ double GRS67 = getDistanceMeter(source, target, Ellipsoid.GRS67);
+ double ANS = getDistanceMeter(source, target, Ellipsoid.ANS);
+ double WGS72 = getDistanceMeter(source, target, Ellipsoid.WGS72);
+ double Clarke1858 = getDistanceMeter(source, target, Ellipsoid.Clarke1858);
+ double Clarke1880 = getDistanceMeter(source, target, Ellipsoid.Clarke1880);
+// System.out.println("Sphere坐标系计算结果:"+Sphere + "米");
+// System.out.println("WGS84坐标系计算结果:"+WGS84 + "米");
+// System.out.println("GRS80坐标系计算结果:"+GRS80 + "米");
+// System.out.println("GRS67坐标系计算结果:"+GRS67 + "米");
+// System.out.println("ANS坐标系计算结果:"+ANS + "米");
+// System.out.println("WGS72坐标系计算结果:"+WGS72 + "米");
+// System.out.println("Clarke1858坐标系计算结果:"+Clarke1858 + "米");
+// System.out.println("Clarke1880坐标系计算结果:"+Clarke1880 + "米");
+ Map<String, Double> map = new HashMap<>();
+ map.put("Sphere", Sphere);
+ map.put("WGS84", WGS84);
+ map.put("GRS80", GRS80);
+ map.put("GRS67", GRS67);
+ map.put("ANS", ANS);
+ map.put("WGS72", WGS72);
+ map.put("Clarke1858", Clarke1858);
+ map.put("Clarke1880", Clarke1880);
+ return map;
+ }
+
+
+ private static double getDistanceMeter(GlobalCoordinates gpsFrom, GlobalCoordinates gpsTo, Ellipsoid ellipsoid){
+ //创建GeodeticCalculator,调用计算方法,传入坐标系、经纬度用于计算距离
+ GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(ellipsoid, gpsFrom, gpsTo);
+ return geoCurve.getEllipsoidalDistance();
+ }
+
+}
diff --git a/cloud-server-other/src/main/resources/mapper/SiteMapper.xml b/cloud-server-other/src/main/resources/mapper/SiteMapper.xml
index ef50ff2..cf93290 100644
--- a/cloud-server-other/src/main/resources/mapper/SiteMapper.xml
+++ b/cloud-server-other/src/main/resources/mapper/SiteMapper.xml
@@ -3,4 +3,33 @@
<mapper namespace="com.dsh.other.mapper.SiteMapper">
+ <select id="querySiteList" resultType="com.dsh.other.model.QuerySiteListVo">
+ select
+ a.id,
+ a.`name`,
+ c.`name` as siteTypeName,
+ b.`name` as storeName,
+ b.address as storeAddress,
+ b.lon as storeLon,
+ b.lat as storeLat,
+ CONCAT(a.appointmentStartTime, '-', a.appointmentEndTime) as times,
+ a.cashPrice as price
+ from t_site a
+ left join t_store b on (a.storeId = b.id)
+ left join t_site_type c on (a.siteTypeId = c.id)
+ where a.state = 1
+ <if test="null != item.startTime and '' != item.startTime and null != item.endTime and '' != item.endTime">
+ and CONCAT(DATE_FORMAT(now, '%Y-%m-%d', ' ', a.appointmentStartTime)) <= CONCAT(DATE_FORMAT(now, '%Y-%m-%d', ' ', #{item.startTime})) and CONCAT(DATE_FORMAT(now, '%Y-%m-%d', ' ', a.appointmentEndTime)) >= CONCAT(DATE_FORMAT(now, '%Y-%m-%d', ' ', #{item.endTime}))
+ </if>
+ <if test="null != item.siteTypeId">
+ and a.siteTypeId = #{item.siteTypeId}
+ </if>
+ <if test="null != item.cityCode">
+ and b.cityCode = #{item.cityCode}
+ </if>
+ <if test="null != item.storeId">
+ and a.storeId = #{item.storeId}
+ </if>
+ order by a.insertTime desc limit #{item.pageNum}, #{item.pageSize}
+ </select>
</mapper>
diff --git a/cloud-server-other/src/main/resources/mapper/SiteTypeMapper.xml b/cloud-server-other/src/main/resources/mapper/SiteTypeMapper.xml
new file mode 100644
index 0000000..49048bf
--- /dev/null
+++ b/cloud-server-other/src/main/resources/mapper/SiteTypeMapper.xml
@@ -0,0 +1,6 @@
+<?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.dsh.other.mapper.SiteTypeMapper">
+
+
+</mapper>
--
Gitblit v1.7.1