Commit 4690d0a7 authored by 周健威's avatar 周健威

修改代码

parent 5d3ce359
package com.github.wxiaoqi.security.common.util; package com.github.wxiaoqi.security.common.util;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.Random; import java.util.Random;
public class OrderUtil { public class OrderUtil {
public static final String DEFAULT_MID = "00";
public static final String APP_MID = "01";
static Date today = new Date(); static Date today = new Date();
static int orderIndex = 0; static int orderIndex = 0;
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
private static String getIndex() { private static String getIndex(String midFix) {
if(StrUtil.isBlank(midFix)) {
midFix = DEFAULT_MID;
}
Date n = new Date(); Date n = new Date();
SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmss"); SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String currTime = outFormat.format(n); String currTime = outFormat.format(n);
...@@ -27,10 +35,10 @@ public class OrderUtil { ...@@ -27,10 +35,10 @@ public class OrderUtil {
today = n; today = n;
orderIndex = 1; orderIndex = 1;
} }
if (orderIndex > 999999) { if (orderIndex > 9999) {
orderIndex = 1; orderIndex = 1;
} }
String indexString = String.format("%s%06d", currTime, orderIndex); String indexString = String.format("%s%s%04d", currTime, midFix, orderIndex);
return indexString; return indexString;
} }
...@@ -41,7 +49,18 @@ public class OrderUtil { ...@@ -41,7 +49,18 @@ public class OrderUtil {
* @return * @return
*/ */
public static String GetOrderNumber(String preFixString) { public static String GetOrderNumber(String preFixString) {
String orderNumberString = preFixString + getIndex(); String orderNumberString = preFixString + getIndex("");
return orderNumberString;
}
/**
* 添加中间代号数字区别,放前面不好看
*
* @param preFixString
* @return
*/
public static String GetOrderNumber(String preFixString, String midFix) {
String orderNumberString = preFixString + getIndex(midFix);
return orderNumberString; return orderNumberString;
} }
......
...@@ -128,6 +128,24 @@ ...@@ -128,6 +128,24 @@
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency> </dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<!-- &lt;!&ndash; swagger &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>com.spring4all</groupId>-->
<!-- <artifactId>swagger-spring-boot-starter</artifactId>-->
<!-- <version>1.7.1.RELEASE</version>-->
<!-- </dependency>-->
</dependencies> </dependencies>
<build> <build>
<finalName>ace-gate</finalName> <finalName>ace-gate</finalName>
......
...@@ -4,6 +4,7 @@ import com.github.wxiaoqi.security.auth.client.EnableAceAuthClient; ...@@ -4,6 +4,7 @@ import com.github.wxiaoqi.security.auth.client.EnableAceAuthClient;
import com.github.wxiaoqi.security.gate.utils.DBLog; import com.github.wxiaoqi.security.gate.utils.DBLog;
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.cloud.client.SpringCloudApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.cloud.openfeign.EnableFeignClients;
...@@ -11,7 +12,8 @@ import org.springframework.cloud.openfeign.EnableFeignClients; ...@@ -11,7 +12,8 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
* @author ace * @author ace
* @create 2018/3/12. * @create 2018/3/12.
*/ */
@SpringBootApplication //@SpringBootApplication
@SpringCloudApplication
@EnableDiscoveryClient @EnableDiscoveryClient
@EnableAceAuthClient @EnableAceAuthClient
@EnableFeignClients({"com.github.wxiaoqi.security.auth.client.feign","com.github.wxiaoqi.security.gate.feign"}) @EnableFeignClients({"com.github.wxiaoqi.security.auth.client.feign","com.github.wxiaoqi.security.gate.feign"})
......
package com.github.wxiaoqi.security.gate.config; package com.github.wxiaoqi.security.gate.config;
import com.github.wxiaoqi.security.gate.handler.RequestBodyRoutePredicateFactory; import com.github.wxiaoqi.security.gate.handler.RequestBodyRoutePredicateFactory;
import com.github.wxiaoqi.security.gate.handler.SwaggerHandler;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
......
package com.github.wxiaoqi.security.gate.config;
import lombok.AllArgsConstructor;
import org.springframework.cloud.gateway.config.GatewayProperties;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.support.NameUtils;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import springfox.documentation.swagger.web.SwaggerResource;
import springfox.documentation.swagger.web.SwaggerResourcesProvider;
import java.util.ArrayList;
import java.util.List;
@Component
@Primary
@AllArgsConstructor
public class SwaggerProvider implements SwaggerResourcesProvider {
public static final String API_URI = "/v2/api-docs";
private final RouteLocator routeLocator;
private final GatewayProperties gatewayProperties;
public static final String AUTH = "ace-auth";
@Override
public List<SwaggerResource> get() {
List<SwaggerResource> resources = new ArrayList<>();
List<String> routes = new ArrayList<>();
//取出gateway的route
routeLocator.getRoutes().subscribe(
route -> {
routes.add(route.getId());
}
);
//结合配置的route-路径(Path),和route过滤,只获取有效的route节点
gatewayProperties.getRoutes().stream().filter(routeDefinition -> routes.contains(routeDefinition.getId()))
.forEach(routeDefinition -> routeDefinition.getPredicates().stream()
.filter(predicateDefinition -> ("Path").equalsIgnoreCase(predicateDefinition.getName()))
.forEach(predicateDefinition -> {
if(!AUTH.equals(routeDefinition.getId())) {
resources.add(swaggerResource(routeDefinition.getId(),
predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0")
.replace("/**", API_URI)));
}
}));
return resources;
}
private SwaggerResource swaggerResource(String name, String location) {
SwaggerResource swaggerResource = new SwaggerResource();
swaggerResource.setName(name);
swaggerResource.setLocation(location);
swaggerResource.setSwaggerVersion("2.0");
return swaggerResource;
}
}
\ No newline at end of file
...@@ -249,9 +249,11 @@ public class AccessGatewayFilter implements GlobalFilter { ...@@ -249,9 +249,11 @@ public class AccessGatewayFilter implements GlobalFilter {
*/ */
private boolean isStartWith(String requestUri) { private boolean isStartWith(String requestUri) {
boolean flag = false; boolean flag = false;
if(requestUri.contains(GATE_WAY_UNAUTH)){ for (String s : GATE_WAY_UNAUTH.split(",")) {
if(requestUri.contains(s)) {
return true; return true;
} }
}
for (String s : startWith.split(",")) { for (String s : startWith.split(",")) {
if (requestUri.startsWith(s)) { if (requestUri.startsWith(s)) {
return true; return true;
......
package com.github.wxiaoqi.security.gate.handler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
import springfox.documentation.swagger.web.*;
import java.util.Optional;
@RestController
@RequestMapping("/swagger-resources")
public class SwaggerHandler {
@Autowired(required = false)
private SecurityConfiguration securityConfiguration;
@Autowired(required = false)
private UiConfiguration uiConfiguration;
private final SwaggerResourcesProvider swaggerResources;
@Autowired
public SwaggerHandler(SwaggerResourcesProvider swaggerResources) {
this.swaggerResources = swaggerResources;
}
@GetMapping("/configuration/security")
public Mono<ResponseEntity<SecurityConfiguration>> securityConfiguration() {
return Mono.just(new ResponseEntity<>(
Optional.ofNullable(securityConfiguration).orElse(SecurityConfigurationBuilder.builder().build()), HttpStatus.OK));
}
@GetMapping("/configuration/ui")
public Mono<ResponseEntity<UiConfiguration>> uiConfiguration() {
return Mono.just(new ResponseEntity<>(
Optional.ofNullable(uiConfiguration).orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK));
}
@GetMapping("")
public Mono<ResponseEntity> swaggerResources() {
return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK)));
}
}
\ No newline at end of file
...@@ -119,7 +119,7 @@ ...@@ -119,7 +119,7 @@
<dependency> <dependency>
<groupId>com.spring4all</groupId> <groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId> <artifactId>swagger-spring-boot-starter</artifactId>
<version>1.6.0.RELEASE</version> <version>1.8.0.RELEASE</version>
</dependency> </dependency>
</dependencies> </dependencies>
......
...@@ -11,4 +11,19 @@ ...@@ -11,4 +11,19 @@
<version>2.0-SNAPSHOT</version> <version>2.0-SNAPSHOT</version>
<groupId>com.xxfc.platform</groupId> <groupId>com.xxfc.platform</groupId>
<artifactId>xx-order-api</artifactId> <artifactId>xx-order-api</artifactId>
<dependencies>
<dependency>
<groupId>com.xxfc.platform</groupId>
<artifactId>xx-vehicle-api</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.xxfc.platform</groupId>
<artifactId>xx-universal-api</artifactId>
<version>2.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project> </project>
\ No newline at end of file
package com.xxfc.platform.order.contant.enumerate;
import java.util.HashMap;
import java.util.Map;
public enum OrderStatusEnum {
ORDER_DEL(0, "删除订单"),
ORDER_CRT(1, "创建订单"),
ORDER_CANCEL(2, "取消订单"),
ORDER_UNPAY(3, "待支付"),
ORDER_TOSTART(4, "待进行(待出行)"),
;
/**
* 编码
*/
private Integer code;
/**
* 类型描述
*/
private String desc;
private static Map<Integer,String> codeAndDesc = new HashMap<Integer, String>();
//Maps.newHashMap();
// static{
// for(VehicleBookRecordStatus constantType : VehicleBookRecordStatus.values()){
// codeAndDesc.put(constantType.getCode(),constantType.getDesc());
// }
// }
OrderStatusEnum(Integer code, String desc){
this.code=code;
this.desc=desc;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public static Boolean exists(Integer code){
return codeAndDesc.containsKey(code);
}
}
\ No newline at end of file
...@@ -56,6 +56,11 @@ public class BaseOrder implements Serializable { ...@@ -56,6 +56,11 @@ public class BaseOrder implements Serializable {
@ApiModelProperty(value = "订单价格") @ApiModelProperty(value = "订单价格")
private BigDecimal orderAmount; private BigDecimal orderAmount;
//实际价格
@Column(name = "real_amount")
@ApiModelProperty(value = "实际价格")
private BigDecimal realAmount;
//详情json信息 //详情json信息
@Column(name = "detail_json") @Column(name = "detail_json")
@ApiModelProperty(value = "详情json信息") @ApiModelProperty(value = "详情json信息")
...@@ -78,6 +83,20 @@ public class BaseOrder implements Serializable { ...@@ -78,6 +83,20 @@ public class BaseOrder implements Serializable {
@ApiModelProperty(value = "用户id") @ApiModelProperty(value = "用户id")
private Integer userId; private Integer userId;
/**
* 订单图片
*/
@Column(name = "picture")
@ApiModelProperty(value = "订单图片")
private String picture;
/**
* 订单图片
*/
@Column(name = "name")
@ApiModelProperty(value = "名称")
private String name;
//创建时间 //创建时间
@Column(name = "crt_time") @Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true ) @ApiModelProperty(value = "创建时间", hidden = true )
......
...@@ -29,6 +29,11 @@ public class OrderRentVehicleDetail implements Serializable{ ...@@ -29,6 +29,11 @@ public class OrderRentVehicleDetail implements Serializable{
@ApiModelProperty(value = "基础订单id") @ApiModelProperty(value = "基础订单id")
private Integer orderId; private Integer orderId;
//基础订单id
@Column(name = "name")
@ApiModelProperty(value = "名称")
private String name;
//创建时间 //创建时间
@Column(name = "crt_time") @Column(name = "crt_time")
@ApiModelProperty(value = "创建时间", hidden = true ) @ApiModelProperty(value = "创建时间", hidden = true )
...@@ -67,7 +72,7 @@ public class OrderRentVehicleDetail implements Serializable{ ...@@ -67,7 +72,7 @@ public class OrderRentVehicleDetail implements Serializable{
//车辆id //车辆id
@Column(name = "vehicle_id") @Column(name = "vehicle_id")
@ApiModelProperty(value = "车辆id") @ApiModelProperty(value = "车辆id")
private Integer vehicleId; private String vehicleId;
//费用详情 //费用详情
@Column(name = "cost_detail") @Column(name = "cost_detail")
......
...@@ -3,6 +3,11 @@ package com.xxfc.platform.order.entity.inter; ...@@ -3,6 +3,11 @@ package com.xxfc.platform.order.entity.inter;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
public interface OrderDetail { public interface OrderDetail {
public Integer getId();
public void setId(Integer id);
Integer getOrderId(); Integer getOrderId();
void setOrderId(Integer orderId); void setOrderId(Integer orderId);
......
...@@ -4,16 +4,84 @@ import com.xxfc.platform.order.entity.OrderRentVehicleDetail; ...@@ -4,16 +4,84 @@ import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Data @Data
public class AddRentVehicleDTO extends OrderRentVehicleDetail{ public class AddRentVehicleDTO{
//主键 //开始时间
@ApiModelProperty(hidden = true) @Column(name = "start_time")
private Integer id; @ApiModelProperty(value = "开始时间")
//基础订单id private Long startTime;
@ApiModelProperty(hidden = true)
private Integer orderId; //结束时间
@Column(name = "end_time")
//车辆id @ApiModelProperty(value = "结束时间")
@ApiModelProperty(hidden = true) private Long endTime;
private Integer vehicleId;
//天数
@Column(name = "day_num")
@ApiModelProperty(value = "天数")
private Integer dayNum;
//取车地点
@Column(name = "start_addr")
@ApiModelProperty(value = "取车地点")
private String startAddr;
//还车地点
@Column(name = "end_addr")
@ApiModelProperty(value = "还车地点")
private String endAddr;
//费用详情
@Column(name = "cost_detail")
@ApiModelProperty(value = "费用详情")
private String costDetail;
//取车城市编号
@Column(name = "start_city")
@ApiModelProperty(value = "取车城市编号")
private Integer startCity;
//还车城市编号
@Column(name = "end_city")
@ApiModelProperty(value = "还车城市编号")
private Integer endCity;
//取车城市名称
@Column(name = "start_city_name")
@ApiModelProperty(value = "取车城市名称")
private String startCityName;
//还车城市名称
@Column(name = "end_city_name")
@ApiModelProperty(value = "还车城市名称")
private String endCityName;
//司机类型 1--公司司机;2--自己司机
@Column(name = "driver_type")
@ApiModelProperty(value = "司机类型 1--公司司机;2--自己司机")
private Integer driverType;
//自己司机ids
@Column(name = "my_driver_ids")
@ApiModelProperty(value = "自己司机ids")
private String myDriverIds;
//出发公司Id
@Column(name = "start_company_id")
@ApiModelProperty(value = "出发公司Id")
private Integer startCompanyId;
//结束公司Id
@Column(name = "end_company_id")
@ApiModelProperty(value = "结束公司Id")
private Integer endCompanyId;
//车型id
@Column(name = "model_id")
@ApiModelProperty(value = "车型id")
private Integer modelId;
} }
...@@ -8,5 +8,5 @@ import java.util.Map; ...@@ -8,5 +8,5 @@ import java.util.Map;
@Data @Data
public class OrderPageVO extends BaseOrder { public class OrderPageVO extends BaseOrder {
List<Map> orderItems; Map detail;
} }
...@@ -4,9 +4,12 @@ import com.xxfc.platform.order.entity.BaseOrder; ...@@ -4,9 +4,12 @@ import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.inter.OrderDetail; import com.xxfc.platform.order.entity.inter.OrderDetail;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail; import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.vo.price.RentVehiclePriceVO; import com.xxfc.platform.order.vo.price.RentVehiclePriceVO;
import com.xxfc.platform.vehicle.entity.Vehicle;
import com.xxfc.platform.vehicle.entity.VehicleModel;
import lombok.Data; import lombok.Data;
@Data @Data
public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail { public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail {
private BaseOrder order; private BaseOrder order;
private VehicleModel vehicleModel;
} }
package com.xxfc.platform.order.vo.pay;
import com.xxfc.platform.universal.vo.OrderPayVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 下单
*
* @author zjw
* @email nishijjo@qq.com
* @date 2019-05-28 16:17:42
*/
@Data
public class RentVehicleOrderPayVO {
//订单号
@ApiModelProperty(value = "订单号")
private String orderNo;
//1:微信公众号支付 2.支付宝即时到账,3,银联
@ApiModelProperty(value = "1:微信公众号支付 2.支付宝即时到账,3,银联")
private Integer payWay;
//来源:1-app;2-小程序
@ApiModelProperty(value = "来源:1-app;2-小程序")
private Integer type;
}
...@@ -13,20 +13,6 @@ public class OrderPriceVO { ...@@ -13,20 +13,6 @@ public class OrderPriceVO {
public BigDecimal orderAmount; public BigDecimal orderAmount;
@ApiModelProperty(value = "商品价格") @ApiModelProperty(value = "商品价格")
public BigDecimal goodsAmount; public BigDecimal goodsAmount;
@ApiModelProperty(value = "实际价格")
public BigDecimal getOrderAmount() { public BigDecimal realAmount;
return orderAmount;
}
public void setOrderAmount(BigDecimal orderAmount) {
this.orderAmount = orderAmount;
}
public BigDecimal getGoodsAmount() {
return goodsAmount;
}
public void setGoodsAmount(BigDecimal goodsAmount) {
this.goodsAmount = goodsAmount;
}
} }
...@@ -26,4 +26,6 @@ public class RentVehiclePriceVO extends OrderPriceVO{ ...@@ -26,4 +26,6 @@ public class RentVehiclePriceVO extends OrderPriceVO{
BigDecimal modelAmount; BigDecimal modelAmount;
@ApiModelProperty(value = "司机单价") @ApiModelProperty(value = "司机单价")
BigDecimal driverPrice; BigDecimal driverPrice;
@ApiModelProperty(value = "费用详情")
private String costDetail;
} }
package com.xxfc.platform.order.config; package com.xxfc.platform.order.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.ApiInfoBuilder;
...@@ -24,6 +25,9 @@ import java.util.List; ...@@ -24,6 +25,9 @@ import java.util.List;
@EnableSwagger2 @EnableSwagger2
public class SwaggerConfig { public class SwaggerConfig {
@Value("${server.port}")
String port;
/** /**
* Every Docket bean is picked up by the swagger-mvc framework - allowing for multiple * Every Docket bean is picked up by the swagger-mvc framework - allowing for multiple
* swagger groups i.e. same code base multiple swagger resource listings. * swagger groups i.e. same code base multiple swagger resource listings.
...@@ -45,6 +49,7 @@ public class SwaggerConfig { ...@@ -45,6 +49,7 @@ public class SwaggerConfig {
pars.add(ticketPar2.build()); pars.add(ticketPar2.build());
return new Docket(DocumentationType.SWAGGER_2) return new Docket(DocumentationType.SWAGGER_2)
.host("10.1.37.248:"+port)
.select() .select()
.apis(RequestHandlerSelectors.basePackage("com.xxfc.platform.order")) .apis(RequestHandlerSelectors.basePackage("com.xxfc.platform.order"))
//.apis(RequestHandlerSelectors.any()) //.apis(RequestHandlerSelectors.any())
......
...@@ -3,6 +3,7 @@ package com.xxfc.platform.order.config; ...@@ -3,6 +3,7 @@ package com.xxfc.platform.order.config;
import com.github.wxiaoqi.security.auth.client.interceptor.ServiceAuthRestInterceptor; import com.github.wxiaoqi.security.auth.client.interceptor.ServiceAuthRestInterceptor;
import com.github.wxiaoqi.security.auth.client.interceptor.UserAuthRestInterceptor; import com.github.wxiaoqi.security.auth.client.interceptor.UserAuthRestInterceptor;
import com.github.wxiaoqi.security.common.handler.GlobalExceptionHandler; import com.github.wxiaoqi.security.common.handler.GlobalExceptionHandler;
import com.xxfc.platform.order.interceptor.CorsInterceptor;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Primary;
...@@ -23,8 +24,9 @@ public class WebConfiguration implements WebMvcConfigurer { ...@@ -23,8 +24,9 @@ public class WebConfiguration implements WebMvcConfigurer {
@Override @Override
public void addInterceptors(InterceptorRegistry registry) { public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getCorsInterceptor()).addPathPatterns("/**");
registry.addInterceptor(getServiceAuthRestInterceptor()). registry.addInterceptor(getServiceAuthRestInterceptor()).
addPathPatterns(getIncludePathPatterns()).addPathPatterns("/3p/**"); addPathPatterns(getIncludePathPatterns());
registry.addInterceptor(getUserAuthRestInterceptor()). registry.addInterceptor(getUserAuthRestInterceptor()).
addPathPatterns(getIncludePathPatterns()); addPathPatterns(getIncludePathPatterns());
} }
...@@ -34,6 +36,11 @@ public class WebConfiguration implements WebMvcConfigurer { ...@@ -34,6 +36,11 @@ public class WebConfiguration implements WebMvcConfigurer {
return new ServiceAuthRestInterceptor(); return new ServiceAuthRestInterceptor();
} }
@Bean
CorsInterceptor getCorsInterceptor() {
return new CorsInterceptor();
}
@Bean @Bean
UserAuthRestInterceptor getUserAuthRestInterceptor() { UserAuthRestInterceptor getUserAuthRestInterceptor() {
return new UserAuthRestInterceptor(); return new UserAuthRestInterceptor();
......
package com.xxfc.platform.order.interceptor;
import org.springframework.http.HttpHeaders;
import org.springframework.web.cors.CorsUtils;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Created by ace on 2017/9/12.
*/
public class CorsInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (request.getHeader(HttpHeaders.ORIGIN) != null) {
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Credentials", "true");
response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT, HEAD");
response.addHeader("Access-Control-Allow-Headers", "Content-Type,authorization");
response.addHeader("Access-Control-Max-Age", "3600");
}
if(CorsUtils.isPreFlightRequest(request)){//是否跨域前option请求,使得话不执行后面拦截器
return Boolean.FALSE;
}
return super.preHandle(request, response, handler);
}
}
package com.xxfc.platform.order.rest; package com.xxfc.platform.order.rest;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken; import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.common.context.BaseContextHandler; import com.github.wxiaoqi.security.common.context.BaseContextHandler;
import com.github.wxiaoqi.security.common.exception.BaseException; import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.BaseResponse;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.CommonBaseController; import com.github.wxiaoqi.security.common.rest.CommonBaseController;
import com.github.wxiaoqi.security.common.util.ClientUtil;
import com.github.wxiaoqi.security.common.util.Query; import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO; import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.github.wxiaoqi.security.common.vo.PageParam; import com.github.wxiaoqi.security.common.vo.PageParam;
import com.xxfc.platform.order.biz.BaseOrderBiz; import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.vo.OrderPageVO; import com.xxfc.platform.order.vo.OrderPageVO;
import com.xxfc.platform.order.vo.pay.RentVehicleOrderPayVO;
import com.xxfc.platform.universal.constant.enumerate.PayChannelEnum;
import com.xxfc.platform.universal.feign.ThirdFeign;
import com.xxfc.platform.universal.vo.OrderPayVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Map; import java.math.BigDecimal;
@Controller @Controller
@RequestMapping("baseOrder") @RequestMapping("baseOrder")
@Api(value="订单",tags={"订单"}) @Api(value="订单",tags={"订单"})
@Slf4j
public class BaseOrderController extends CommonBaseController { public class BaseOrderController extends CommonBaseController {
@Autowired @Autowired
BaseOrderBiz baseOrderBiz; BaseOrderBiz baseOrderBiz;
@Autowired
ThirdFeign thirdFeign;
@Value("${gateway.host}")
String host;
@Value("${gateway.order}")
String order;
String notifyUrl = "/baseOrder/notifyUrl";
public static final Integer STATUS_SUCCESS = 1;
@RequestMapping(value = "/page",method = RequestMethod.GET) @RequestMapping(value = "/page",method = RequestMethod.GET)
@ResponseBody @ResponseBody
@ApiOperation(value = "订单列表") @ApiOperation(value = "订单列表")
...@@ -47,9 +74,87 @@ public class BaseOrderController extends CommonBaseController { ...@@ -47,9 +74,87 @@ public class BaseOrderController extends CommonBaseController {
return new ObjectRestResponse<>().data(PageDataVO.pageInfo(query.getPage(), query.getLimit(), baseOrderBiz.pageByParm(query.getSuper()))); return new ObjectRestResponse<>().data(PageDataVO.pageInfo(query.getPage(), query.getLimit(), baseOrderBiz.pageByParm(query.getSuper())));
} }
@RequestMapping(value = "/pay",method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "订单支付")
@IgnoreClientToken
public ObjectRestResponse pay(@RequestBody RentVehicleOrderPayVO vo){
//查询列表数据
if(StringUtils.isBlank(BaseContextHandler.getUserID())) {
throw new BaseException(ResultCode.AJAX_WECHAT_NOTEXIST_CODE);
}
OrderPayVo orderPayVo = BeanUtil.toBean(vo, OrderPayVo.class);
BaseOrder baseOrder = baseOrderBiz.selectOne(new BaseOrder(){{
setNo(vo.getOrderNo());
}});
orderPayVo.setAmount(baseOrder.getRealAmount().multiply(new BigDecimal("100")).intValue());
orderPayVo.setBody(baseOrder.getName());
orderPayVo.setBuyerIp(StringUtils.defaultIfBlank(request.getHeader("userHost"), ClientUtil.getClientIp(request)));
orderPayVo.setChannel(PayChannelEnum.ORDER_CRT.getCode());
orderPayVo.setNotifyUrl(host+ order+ notifyUrl);
orderPayVo.setSubject(baseOrder.getName());
orderPayVo.setUserId(baseOrder.getUserId());
ObjectRestResponse response = BeanUtil.toBean(thirdFeign.wx(orderPayVo), ObjectRestResponse.class);
return response;
//.data(PageDataVO.pageInfo(query.getPage(), query.getLimit(), baseOrderBiz.pageByParm(query.getSuper())));
}
@RequestMapping(value = "/notifyUrl",method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "订单支付回调")
@IgnoreClientToken
public ObjectRestResponse notifyUrl(@RequestBody NotifyUrlDTO dto){
//判断是否成功,并且订单是未支付状态,则添加支付编号和修改状态
if(STATUS_SUCCESS.equals(dto.getStatus()) && StrUtil.isNotBlank(dto.getOrderNo())){
BaseOrder baseOrder = baseOrderBiz.selectOne(new BaseOrder(){{
setNo(dto.getOrderNo());
}});
if(OrderStatusEnum.ORDER_UNPAY.equals(baseOrder.getStatus())) {
baseOrder.setStatus(OrderStatusEnum.ORDER_TOSTART.getCode());
baseOrder.setOutTradeNo(dto.getOutTradeNo());
baseOrderBiz.updateById(baseOrder);
}else {
log.info(" exception notifyUrl : " + JSONUtil.toJsonStr(dto));
}
}else {
log.info(" exception notifyUrl : " + JSONUtil.toJsonStr(dto));
}
return new ObjectRestResponse().rel(true);
}
/**
* 订单查询类
*/
@Data @Data
public class QueryOrderDTO extends PageParam { public class QueryOrderDTO extends PageParam {
@ApiModelProperty(hidden = false) @ApiModelProperty(hidden = false)
private Integer crtUser; private Integer crtUser;
@ApiModelProperty(value = "订单状态\n" +
"0--删除\n" +
"1--创建订单\n" +
"2--取消\n" +
"3--待付款\n" +
"4--待出行\n" +
"5--出行中(进行中)\n" +
"6--已完成")
private Integer status;
}
@Data
public class NotifyUrlDTO{
//订单号
@ApiModelProperty(value = "订单号")
private String orderNo;
//订单号
@ApiModelProperty(value = "订单号")
private String outTradeNo;
@ApiModelProperty(value = "支付是否成功 1:成功;2:失败")
private Integer status;
} }
} }
\ No newline at end of file
...@@ -11,6 +11,7 @@ import com.xxfc.platform.order.service.OrderRentVehicleService; ...@@ -11,6 +11,7 @@ import com.xxfc.platform.order.service.OrderRentVehicleService;
import com.xxfc.platform.order.vo.AddRentVehicleDTO; import com.xxfc.platform.order.vo.AddRentVehicleDTO;
import com.xxfc.platform.order.vo.order.RentVehicleBO; import com.xxfc.platform.order.vo.order.RentVehicleBO;
import com.xxfc.platform.order.vo.price.OrderPriceVO; import com.xxfc.platform.order.vo.price.OrderPriceVO;
import com.xxfc.platform.order.vo.price.RentVehiclePriceVO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -52,7 +53,7 @@ public class OrderRentVehicleController extends CommonBaseController { ...@@ -52,7 +53,7 @@ public class OrderRentVehicleController extends CommonBaseController {
@ResponseBody @ResponseBody
@ApiOperation(value = "价格计算") @ApiOperation(value = "价格计算")
@IgnoreUserToken @IgnoreUserToken
public ObjectRestResponse<OrderPriceVO> calculatePrice(CalculatePriceVO vo){ public ObjectRestResponse<RentVehiclePriceVO> calculatePrice(CalculatePriceVO vo){
RentVehicleBO bo = BeanUtil.toBean(vo, RentVehicleBO.class); RentVehicleBO bo = BeanUtil.toBean(vo, RentVehicleBO.class);
return new ObjectRestResponse<>().rel(true).data(orderRentVehicleService.calculatePrice(bo)); return new ObjectRestResponse<>().rel(true).data(orderRentVehicleService.calculatePrice(bo));
} }
......
...@@ -5,13 +5,14 @@ import cn.hutool.core.util.IdUtil; ...@@ -5,13 +5,14 @@ import cn.hutool.core.util.IdUtil;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.context.BaseContextHandler; import com.github.wxiaoqi.security.common.context.BaseContextHandler;
import com.github.wxiaoqi.security.common.exception.BaseException; import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.OrderUtil;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.xxfc.platform.order.biz.BaseOrderBiz; import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.inter.OrderDetail; import com.xxfc.platform.order.entity.inter.OrderDetail;
import com.xxfc.platform.order.vo.price.OrderPriceVO; import com.xxfc.platform.order.vo.price.OrderPriceVO;
import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -32,32 +33,40 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or ...@@ -32,32 +33,40 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or
* 创建基础订单 * 创建基础订单
* @return * @return
*/ */
public BaseOrder createOrder() { public BaseOrder createBaseOrder() {
BaseOrder baseOrder = new BaseOrder(); BaseOrder baseOrder = new BaseOrder();
//设置订单号 //设置订单号
baseOrder.setNo(IdUtil.randomUUID()); baseOrder.setNo(OrderUtil.GetOrderNumber("", OrderUtil.APP_MID));
//设置订单类型 //设置订单类型
if(null == orderTypeEnum) if(null == orderTypeEnum)
throw new BaseException(ResultCode.NOTEXIST_CODE); throw new BaseException(ResultCode.NOTEXIST_CODE);
else { else {
baseOrder.setType(orderTypeEnum.getCode()); baseOrder.setType(orderTypeEnum.getCode());
} }
//设置订单状态
baseOrder.setStatus(OrderStatusEnum.ORDER_CRT.getCode());
//设置用户id //设置用户id
baseOrder.setUserId(Integer.valueOf(BaseContextHandler.getUserID())); baseOrder.setUserId(Integer.valueOf(BaseContextHandler.getUserID()));
return baseOrder; return baseOrder;
} }
public void initDetail(Detail detail) {
BaseOrder order = createBaseOrder();
detail.setOrder(order);
}
/** /**
* 创建订单及其子项 * 创建订单及其子项
* @param detail * @param detail
*/ */
public void createOrder(Detail detail) { public void createOrder(Detail detail) {
BaseOrder order = createOrder(); //初始化
detail.setOrder(order); initDetail(detail);
//计算价格 //计算价格
handleCalculate(detail); handleCalculate(detail);
//插入baseOrder //插入baseOrder
baseOrderBiz.insertSelective(order); baseOrderBiz.insertSelective(detail.getOrder());
//处理detail //处理detail
handleDetail(detail); handleDetail(detail);
} }
...@@ -69,6 +78,8 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or ...@@ -69,6 +78,8 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or
public void handleDetail(Detail detail){ public void handleDetail(Detail detail){
detail.setOrderId(detail.getOrder().getId()); detail.setOrderId(detail.getOrder().getId());
detailBiz.insertSelective(detail); detailBiz.insertSelective(detail);
detail.getOrder().setDetailId(detail.getId());
baseOrderBiz.updateById(detail.getOrder());
} }
// /** // /**
...@@ -101,6 +112,7 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or ...@@ -101,6 +112,7 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or
OrderPriceVO priceVO = new OrderPriceVO(); OrderPriceVO priceVO = new OrderPriceVO();
priceVO.setGoodsAmount(BigDecimal.ZERO); priceVO.setGoodsAmount(BigDecimal.ZERO);
priceVO.setOrderAmount(BigDecimal.ZERO); priceVO.setOrderAmount(BigDecimal.ZERO);
priceVO.setRealAmount(BigDecimal.ZERO);
return priceVO; return priceVO;
} }
......
...@@ -9,6 +9,7 @@ import cn.hutool.extra.template.TemplateUtil; ...@@ -9,6 +9,7 @@ import cn.hutool.extra.template.TemplateUtil;
import com.xxfc.platform.order.biz.OrderCostDetailBiz; import com.xxfc.platform.order.biz.OrderCostDetailBiz;
import com.xxfc.platform.order.biz.OrderRentVehicleBiz; import com.xxfc.platform.order.biz.OrderRentVehicleBiz;
import com.xxfc.platform.order.contant.enumerate.OrderCostEnum; import com.xxfc.platform.order.contant.enumerate.OrderCostEnum;
import com.xxfc.platform.order.contant.enumerate.OrderStatusEnum;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum; import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderCostDetail; import com.xxfc.platform.order.entity.OrderCostDetail;
import com.xxfc.platform.order.vo.order.RentVehicleBO; import com.xxfc.platform.order.vo.order.RentVehicleBO;
...@@ -42,10 +43,25 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -42,10 +43,25 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
this.orderTypeEnum = OrderTypeEnum.RentVehicle; this.orderTypeEnum = OrderTypeEnum.RentVehicle;
} }
@Override
public void initDetail(RentVehicleBO bo) {
super.initDetail(bo);
VehicleModel vehicleModel = vehicleFeign.get(bo.getModelId()).getData();
bo.setVehicleModel(vehicleModel);
}
@Override @Override
public void handleDetail(RentVehicleBO bo) { public void handleDetail(RentVehicleBO bo) {
//获取可用车辆 //获取可用车辆
acquireVehicle(bo); acquireVehicle(bo);
//设置订单状态为3
bo.getOrder().setStatus(OrderStatusEnum.ORDER_UNPAY.getCode());
//设置订单图片
bo.getOrder().setPicture(bo.getVehicleModel().getPicture());
//设置订单名称
bo.getOrder().setName(bo.getVehicleModel().getName());
super.handleDetail(bo); super.handleDetail(bo);
} }
...@@ -54,7 +70,6 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -54,7 +70,6 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
RentVehiclePriceVO rvpv = calculatePrice(bo); RentVehiclePriceVO rvpv = calculatePrice(bo);
BeanUtil.copyProperties(rvpv, bo.getOrder()); BeanUtil.copyProperties(rvpv, bo.getOrder());
BeanUtil.copyProperties(rvpv, bo); BeanUtil.copyProperties(rvpv, bo);
bo.setCostDetail(costDetail(rvpv));
} }
@Override @Override
...@@ -83,6 +98,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -83,6 +98,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
rvp.setGoodsAmount(goodsAmount); rvp.setGoodsAmount(goodsAmount);
rvp.setDriverAmount(driverAmount); rvp.setDriverAmount(driverAmount);
rvp.setVehicleAmount(vehicleAmount); rvp.setVehicleAmount(vehicleAmount);
rvp.setRealAmount(orderAmount);
rvp.setDeposit(DEPOSIT); rvp.setDeposit(DEPOSIT);
rvp.setModelAmount(vehicleModel.getPrice()); rvp.setModelAmount(vehicleModel.getPrice());
rvp.setDriverPrice(DRIVER_PRICE); rvp.setDriverPrice(DRIVER_PRICE);
...@@ -90,6 +106,8 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -90,6 +106,8 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
rvp.setDayNum(detail.getDayNum()); rvp.setDayNum(detail.getDayNum());
rvp.setVehicleNum(1); rvp.setVehicleNum(1);
rvp.setDriverNum(1); rvp.setDriverNum(1);
detail.setCostDetail(costDetail(rvp));
return rvp; return rvp;
} }
...@@ -103,12 +121,14 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl ...@@ -103,12 +121,14 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
OrderCostDetail orderCostDetail = orderCostDetailBiz.selectById(OrderCostEnum.RentVehicle.getCode()); OrderCostDetail orderCostDetail = orderCostDetailBiz.selectById(OrderCostEnum.RentVehicle.getCode());
Template template = engine.getTemplate(orderCostDetail.getTemplate()); Template template = engine.getTemplate(orderCostDetail.getTemplate());
String result = template.render(Dict.parse(vo)); String result = template.render(Dict.parse(vo));
vo.setCostDetail(result);
return result; return result;
} }
private Integer acquireVehicle(RentVehicleBO detail) { private String acquireVehicle(RentVehicleBO detail) {
//根据车型、时间、距离,门店,预定车辆 //根据车型、时间、距离,门店,预定车辆
Integer vehicleId = new Integer(1); String vehicleId = "0e9a88db-cb1b-48a4-b307-40f89eed906f";
detail.setVehicleId(vehicleId);
return vehicleId; return vehicleId;
} }
} }
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
<result javaType="Integer" column="type" property="type"></result> <result javaType="Integer" column="type" property="type"></result>
<discriminator javaType="Integer" column="type"> <discriminator javaType="Integer" column="type">
<case value="1" resultType="com.xxfc.platform.order.vo.OrderPageVO"> <case value="1" resultType="com.xxfc.platform.order.vo.OrderPageVO">
<collection column="id" ofType="java.util.HashMap" property="orderItems" select="com.xxfc.platform.order.mapper.OrderRentVehicleDetailMapper.listByOrderId"></collection> <association column="id" property="detail" select="com.xxfc.platform.order.mapper.OrderRentVehicleDetailMapper.oneByOrderId"></association>
</case> </case>
</discriminator> </discriminator>
</resultMap> </resultMap>
...@@ -39,9 +39,14 @@ ...@@ -39,9 +39,14 @@
from base_order from base_order
<where> <where>
<if test="crtUser != null"> <if test="crtUser != null">
crt_user = #{crtUser} and crt_user = #{crtUser}
</if>
<if test="status != null">
and status = #{status}
</if> </if>
</where> </where>
order by crt_time desc;
</select> </select>
</mapper> </mapper>
\ No newline at end of file
...@@ -9,6 +9,12 @@ ...@@ -9,6 +9,12 @@
where order_id = #{orderId} where order_id = #{orderId}
</select> </select>
<select id="oneByOrderId" parameterType="Integer" resultType="map">
select *
from order_rent_vehicle_detail
where order_id = #{orderId} limit 1 offset 0;
</select>
<select id="getPScore" resultType="Integer" > <select id="getPScore" resultType="Integer" >
SELECT round(IFNULL (AVG(score),0)) score FROM order_rent_vehicle_detail WHERE model_id=#{modelId} SELECT round(IFNULL (AVG(score),0)) score FROM order_rent_vehicle_detail WHERE model_id=#{modelId}
</select> </select>
......
package com.xxfc.platform.universal.constant.enumerate;
import java.util.HashMap;
import java.util.Map;
public enum PayChannelEnum {
ORDER_CRT(1, "租车"),
ORDER_CANCEL(2, "旅游"),
;
/**
* 编码
*/
private Integer code;
/**
* 类型描述
*/
private String desc;
private static Map<Integer,String> codeAndDesc = new HashMap<Integer, String>();
PayChannelEnum(Integer code, String desc){
this.code=code;
this.desc=desc;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public static Boolean exists(Integer code){
return codeAndDesc.containsKey(code);
}
}
...@@ -56,7 +56,7 @@ public class OrderPayVo{ ...@@ -56,7 +56,7 @@ public class OrderPayVo{
@ApiModelProperty(value = "回调地址") @ApiModelProperty(value = "回调地址")
private String notifyUrl; private String notifyUrl;
//支付金额 //支付金额
@ApiModelProperty(value = "支付金额") @ApiModelProperty(value = "支付金额")
private Integer amount; private Integer amount;
......
...@@ -49,7 +49,7 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper,OrderPay> { ...@@ -49,7 +49,7 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper,OrderPay> {
Integer amount=orderPayVo.getAmount(); Integer amount=orderPayVo.getAmount();
log.error("---下单---order_no====="+order_no+"--支付订单号--trade_no===="+trade_no+"--金额---amount===="+amount); log.error("---下单---order_no====="+order_no+"--支付订单号--trade_no===="+trade_no+"--金额---amount===="+amount);
//报名费回调路径 //报名费回调路径
String jsParam = WXPay.apppay(amount+"",orderPayVo.getBody(),"https://"+ SystemConfig.weixinHost+"/api/universal/app/unauth/notify" ,trade_no,orderPayVo.getBuyerIp(),0); String jsParam = WXPay.apppay(1+"",orderPayVo.getBody(),"https://"+ SystemConfig.weixinHost+"/api/universal/app/unauth/notify" ,trade_no,orderPayVo.getBuyerIp(),0);
log.info("报名费回调路径jsParam:"+jsParam); log.info("报名费回调路径jsParam:"+jsParam);
if(!StringUtils.isBlank(jsParam)) if(!StringUtils.isBlank(jsParam))
{ {
......
...@@ -2,9 +2,13 @@ package com.xxfc.platform.universal.biz; ...@@ -2,9 +2,13 @@ package com.xxfc.platform.universal.biz;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.common.util.OrderUtil; import com.github.wxiaoqi.security.common.util.OrderUtil;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.util.OrderUtil;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.util.process.SystemConfig; import com.github.wxiaoqi.security.common.util.process.SystemConfig;
import com.github.wxiaoqi.security.common.util.result.JsonResultUtil; import com.github.wxiaoqi.security.common.util.result.JsonResultUtil;
import com.xxfc.platform.universal.entity.OrderRefund;
import com.xxfc.platform.universal.mapper.OrderRefundMapper;
import com.xxfc.platform.universal.vo.OrderRefundVo; import com.xxfc.platform.universal.vo.OrderRefundVo;
import com.xxfc.platform.universal.weixin.api.WxPayRefundUtils; import com.xxfc.platform.universal.weixin.api.WxPayRefundUtils;
import com.xxfc.platform.universal.weixin.util.Snowflake; import com.xxfc.platform.universal.weixin.util.Snowflake;
...@@ -13,10 +17,6 @@ import org.apache.commons.beanutils.BeanUtils; ...@@ -13,10 +17,6 @@ import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.xxfc.platform.universal.entity.OrderRefund;
import com.xxfc.platform.universal.mapper.OrderRefundMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
/** /**
* 订单支付退款表 * 订单支付退款表
* *
......
...@@ -3,6 +3,7 @@ package com.xxfc.platform.vehicle.feign; ...@@ -3,6 +3,7 @@ package com.xxfc.platform.vehicle.feign;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.vehicle.common.RestResponse; import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.entity.VehicleModel; import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.vo.BookVehicleVo;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -18,6 +19,6 @@ public interface VehicleFeign { ...@@ -18,6 +19,6 @@ public interface VehicleFeign {
@RequestMapping(value = "/vehicleModel/app/addScore", method = RequestMethod.GET) @RequestMapping(value = "/vehicleModel/app/addScore", method = RequestMethod.GET)
public RestResponse addScore(@RequestParam(value="id")Integer id, @RequestParam(value="score")Integer score); public RestResponse addScore(@RequestParam(value="id")Integer id, @RequestParam(value="score")Integer score);
// @PostMapping(value = "/vehicleInfo/{id}") @RequestMapping(value = "/rent/book/vehicle", method = RequestMethod.POST)
// public ObjectRestResponse<VehicleModel> vehicleInfo(@PathVariable("id") int id); public RestResponse<Integer> rentApplyVehicle(@RequestBody BookVehicleVo bookVehicleVo);
} }
...@@ -40,41 +40,49 @@ public class BookVehicleVo { ...@@ -40,41 +40,49 @@ public class BookVehicleVo {
/** /**
* 提车地点 * 提车地点
*/ */
@ApiModelProperty("提车地点")
private String liftAddr; private String liftAddr;
/** /**
* 提车地点 * 提车公司
*/ */
@ApiModelProperty("提车公司")
private Integer liftCompany; private Integer liftCompany;
/** /**
* 目的地 * 目的地
*/ */
@ApiModelProperty("目的地")
private String destination; private String destination;
/** /**
* 备注 * 备注
*/ */
@ApiModelProperty("备注")
private String remark; private String remark;
/** /**
* 随车物品id以及数量 List<Map<id,数量>> * 随车物品id以及数量 List<Map<id,数量>>
*/ */
@ApiModelProperty("随车物品id以及数量 List<Map<id,数量>>")
Map<Integer,Integer> selectedAccItem; Map<Integer,Integer> selectedAccItem;
/** /**
* 提车阶段里程数 * 提车阶段里程数
*/ */
@ApiModelProperty("提车阶段里程数")
private Integer mileageLift; private Integer mileageLift;
/** /**
* 还车阶段里程数 * 还车阶段里程数
*/ */
@ApiModelProperty("还车阶段里程数")
private Integer mileageRet; private Integer mileageRet;
/** /**
* 是否违章 * 是否违章
*/ */
@ApiModelProperty("是否违章")
private Integer haveViolation; private Integer haveViolation;
......
package com.xxfc.platform.vehicle.vo;
import com.github.wxiaoqi.security.common.vo.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Map;
@Data
public class RentVehicleBookDTO extends PageParam {
//根据车型、时间、距离,门店,预定车辆
@ApiModelProperty("车型id")
private Integer modelId;
/**
* 预定目标日期(开始)
*/
@ApiModelProperty("预定目标日期(开始)")
private String bookStartDate;
/**
* 预定目标日期(结束)
*/
@ApiModelProperty("预定目标日期(结束)")
private String bookEndDate;
/**
* 提车地点
*/
@ApiModelProperty("提车地点")
private String liftAddr;
/**
* 提车公司
*/
@ApiModelProperty("提车公司")
private Integer liftCompany;
/**
* 目的地
*/
@ApiModelProperty("目的地")
private String destination;
}
\ No newline at end of file
...@@ -9,15 +9,12 @@ import java.math.BigDecimal; ...@@ -9,15 +9,12 @@ import java.math.BigDecimal;
import java.util.List; import java.util.List;
@Data @Data
public class UsableVehicleVO { public class UsableVehicleModelVO {
//车辆id //车辆id
Integer modelId;
Vehicle vehicle;
BigDecimal distance; BigDecimal distance;
VehicleModel vehicleModel; VehicleModel vehicleModel;
// String companyName;
BranchCompany company; BranchCompany company;
} }
\ No newline at end of file
...@@ -829,8 +829,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> { ...@@ -829,8 +829,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
return zoneCompanyIds.parallelStream().distinct().collect(Collectors.toList()); return zoneCompanyIds.parallelStream().distinct().collect(Collectors.toList());
} }
public PageDataVO<UsableVehicleVO> searchUsable(UsableVeicleDTO dto){ public PageDataVO<UsableVehicleModelVO> searchUsableModel(UsableVeicleDTO dto){
//adjustBookedInfoParam(params, );
Map<String, Object> params = BeanUtil.beanToMap(dto); Map<String, Object> params = BeanUtil.beanToMap(dto);
List<String> notBookedDates = Lists.newArrayList(); List<String> notBookedDates = Lists.newArrayList();
if(StringUtils.isNotBlank(dto.getStartDate())&& if(StringUtils.isNotBlank(dto.getStartDate())&&
...@@ -855,8 +854,38 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> { ...@@ -855,8 +854,38 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
fillBookedDateSearchParam(params,yearMonthAndDate,yearMonthAndDateNotBooked); fillBookedDateSearchParam(params,yearMonthAndDate,yearMonthAndDateNotBooked);
PageHelper.startPage(dto.getPage(), dto.getLimit()); PageHelper.startPage(dto.getPage(), dto.getLimit());
List<UsableVehicleVO> lists = mapper.searchUsable(params); List<UsableVehicleModelVO> lists = mapper.searchUsableModel(params);
PageInfo<UsableVehicleVO> usableVehicleInfo = new PageInfo<>(lists); PageInfo<UsableVehicleModelVO> usableVehicleInfo = new PageInfo<>(lists);
return PageDataVO.pageInfo(usableVehicleInfo);
}
public PageDataVO<Vehicle> searchUsableVehicle(RentVehicleBookDTO dto){
Map<String, Object> params = BeanUtil.beanToMap(dto);
List<String> notBookedDates = Lists.newArrayList();
if(StringUtils.isNotBlank(dto.getBookEndDate())&&
StringUtils.isNotBlank(dto.getBookEndDate())) {
notBookedDates = convertDatePeriod2List(dto.getBookEndDate(),
dto.getBookEndDate());
}
//若传入预定信息查询条件,则查询对应月份预定信息查询条件(不超过3个月)
if(CollectionUtils.isEmpty(notBookedDates)){
//return;
}
//筛选出查询条件所在月份
Set<String> allYearMonth = new HashSet<>();//记录所有年月
Map<String,List<String>> yearMonthAndDate = new HashMap<>();//预定年月 - 预定日期列表
Map<String,List<String>> yearMonthAndDateNotBooked = new HashMap<>();//未预定年月 - 未预定日期列表
classifyByYearMonth(notBookedDates,yearMonthAndDateNotBooked,allYearMonth);
if(allYearMonth.size()>MAX_MONTH_COUNT_BOOKED_INFO_QUERY){
throw new CustomIllegalParamException(" only 3 month can be included <bookedInfo> param.");
}
//加入预定信息查询条件
fillBookedDateSearchParam(params,yearMonthAndDate,yearMonthAndDateNotBooked);
PageHelper.startPage(dto.getPage(), dto.getLimit());
List<Vehicle> lists = mapper.searchUsableVehicle(params);
PageInfo<Vehicle> usableVehicleInfo = new PageInfo<>(lists);
return PageDataVO.pageInfo(usableVehicleInfo); return PageDataVO.pageInfo(usableVehicleInfo);
} }
} }
package com.xxfc.platform.vehicle.config; package com.xxfc.platform.vehicle.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.ApiInfoBuilder;
...@@ -24,6 +25,9 @@ import java.util.List; ...@@ -24,6 +25,9 @@ import java.util.List;
@EnableSwagger2 @EnableSwagger2
public class SwaggerConfig{ public class SwaggerConfig{
@Value("${server.port}")
String port;
/** /**
* Every Docket bean is picked up by the swagger-mvc framework - allowing for multiple * Every Docket bean is picked up by the swagger-mvc framework - allowing for multiple
* swagger groups i.e. same code base multiple swagger resource listings. * swagger groups i.e. same code base multiple swagger resource listings.
...@@ -38,6 +42,7 @@ public class SwaggerConfig{ ...@@ -38,6 +42,7 @@ public class SwaggerConfig{
pars.add(ticketPar.build()); //根据每个方法名也知道当前方法在设置什么参数 pars.add(ticketPar.build()); //根据每个方法名也知道当前方法在设置什么参数
return new Docket(DocumentationType.SWAGGER_2) return new Docket(DocumentationType.SWAGGER_2)
.host("10.1.37.248:"+port)
.select() .select()
.apis(RequestHandlerSelectors.basePackage("com.xxfc.platform.vehicle")) .apis(RequestHandlerSelectors.basePackage("com.xxfc.platform.vehicle"))
//.apis(RequestHandlerSelectors.any()) //.apis(RequestHandlerSelectors.any())
......
...@@ -3,7 +3,7 @@ package com.xxfc.platform.vehicle.mapper; ...@@ -3,7 +3,7 @@ package com.xxfc.platform.vehicle.mapper;
import com.xxfc.platform.vehicle.entity.Vehicle; import com.xxfc.platform.vehicle.entity.Vehicle;
import com.xxfc.platform.vehicle.vo.AddOrUpdateVehicleVo; import com.xxfc.platform.vehicle.vo.AddOrUpdateVehicleVo;
import com.xxfc.platform.vehicle.vo.QueryVehicleVo; import com.xxfc.platform.vehicle.vo.QueryVehicleVo;
import com.xxfc.platform.vehicle.vo.UsableVehicleVO; import com.xxfc.platform.vehicle.vo.UsableVehicleModelVO;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
...@@ -29,5 +29,7 @@ public interface VehicleMapper extends Mapper<Vehicle> { ...@@ -29,5 +29,7 @@ public interface VehicleMapper extends Mapper<Vehicle> {
Vehicle selectByNumberPlate(String numberPlate); Vehicle selectByNumberPlate(String numberPlate);
List<UsableVehicleVO> searchUsable(Map<String, Object> params); List<UsableVehicleModelVO> searchUsableModel(Map<String, Object> params);
List<Vehicle> searchUsableVehicle(Map<String, Object> params);
} }
\ No newline at end of file
package com.xxfc.platform.vehicle.mapper; package com.xxfc.platform.vehicle.mapper;
import com.xxfc.platform.vehicle.entity.VehicleModel; import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.vo.UsableVehicleVO;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/** /**
* 车型 * 车型
* *
......
package com.xxfc.platform.vehicle.rest; package com.xxfc.platform.vehicle.rest;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.JSONException;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken; import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken; import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig; import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.common.context.BaseContextHandler; import com.github.wxiaoqi.security.common.context.BaseContextHandler;
import com.github.wxiaoqi.security.common.msg.BaseResponse;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.vo.PageDataVO; import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.vehicle.biz.VehicleBiz; import com.xxfc.platform.vehicle.biz.VehicleBiz;
...@@ -36,6 +38,8 @@ import java.util.List; ...@@ -36,6 +38,8 @@ import java.util.List;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.xxfc.platform.vehicle.constant.VehicleConstant.USER_APP;
@RestController @RestController
@RequestMapping("/vehicleInfo") @RequestMapping("/vehicleInfo")
@Slf4j @Slf4j
...@@ -262,25 +266,37 @@ public class VehicleController extends BaseController<VehicleBiz> { ...@@ -262,25 +266,37 @@ public class VehicleController extends BaseController<VehicleBiz> {
@ApiOperation("可用车辆查询") @ApiOperation("可用车辆查询")
@RequestMapping(value = "/rent/usable-vehicle", method = RequestMethod.GET) @RequestMapping(value = "/rent/usable-vehicle", method = RequestMethod.GET)
@IgnoreUserToken @IgnoreUserToken
public ObjectRestResponse<PageDataVO<UsableVehicleVO>> rentUsableVehicle(UsableVeicleDTO dto) throws Exception { public ObjectRestResponse<PageDataVO<UsableVehicleModelVO>> rentUsableVehicle(UsableVeicleDTO dto) throws Exception {
//根据时间 获得 可用车辆 //根据时间 获得 可用车辆
//结合车型 //结合车型
if(StringUtils.isNotBlank(dto.getCatasStr())) { if(StringUtils.isNotBlank(dto.getCatasStr())) {
dto.setCatas(Pattern.compile(",").splitAsStream(dto.getCatasStr()).map((s)-> Integer.parseInt(s)).collect(Collectors.toList())); dto.setCatas(Pattern.compile(",").splitAsStream(dto.getCatasStr()).map((s)-> Integer.parseInt(s)).collect(Collectors.toList()));
} }
return new ObjectRestResponse<>().data(vehicleBiz.searchUsable(dto)).rel(true); return new ObjectRestResponse<>().data(vehicleBiz.searchUsableModel(dto)).rel(true);
} }
/** /**
* 租车触发的申请预定车辆 * 租车触发的申请预定车辆
* *
* @param bookVehicleVo * @param dto
* @return * @return
*/ */
@ApiOperation("租车触发的申请预定车辆")
@RequestMapping(value = "/rent/book/vehicle", method = RequestMethod.POST) @RequestMapping(value = "/rent/book/vehicle", method = RequestMethod.POST)
public RestResponse<Integer> rentApplyVehicle(@RequestBody BookVehicleVo bookVehicleVo) throws Exception { public RestResponse<String> rentApplyVehicle(@RequestBody RentVehicleBookDTO dto) throws Exception {
Integer operatorId = Integer.parseInt(BaseContextHandler.getUserID()); //默认USER_APP 预约
Integer operatorId = USER_APP;
String userName = BaseContextHandler.getName(); String userName = BaseContextHandler.getName();
BookVehicleVo bookVehicleVo = BeanUtil.toBean(dto, BookVehicleVo.class);
dto.setLimit(1);
dto.setPage(1);
//查询可车辆信息
PageDataVO<Vehicle> pageDataVO = vehicleBiz.searchUsableVehicle(dto);
bookVehicleVo.setVehicle(pageDataVO.getData().get(0).getId());
return baseBiz.applyVehicle4Employee(operatorId, bookVehicleVo, userName); return baseBiz.applyVehicle4Employee(operatorId, bookVehicleVo, userName);
//new RestResponse<String>();
//baseBiz.applyVehicle4Employee(operatorId, bookVehicleVo, userName);
} }
} }
...@@ -2,10 +2,10 @@ ...@@ -2,10 +2,10 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xxfc.platform.vehicle.mapper.VehicleMapper"> <mapper namespace="com.xxfc.platform.vehicle.mapper.VehicleMapper">
<resultMap id="searchUsableMap" type="com.xxfc.platform.vehicle.vo.UsableVehicleVO"> <resultMap id="searchUsableModelMap" type="com.xxfc.platform.vehicle.vo.UsableVehicleModelVO">
<!-- <collection column="company_id" property="id" ofType="com.xxfc.platform.vehicle.entity.BranchCompany" select="com.xxfc.platform.vehicle.mapper.BranchCompanyMapper.selectByPrimaryKey" />--> <!-- <collection column="company_id" property="id" ofType="com.xxfc.platform.vehicle.entity.BranchCompany" select="com.xxfc.platform.vehicle.mapper.BranchCompanyMapper.selectByPrimaryKey" />-->
<!-- <result column="company_id" property="companyId" jdbcType="VARCHAR" javaType="java.lang.Integer"/>--> <!-- <result column="company_id" property="companyId" jdbcType="VARCHAR" javaType="java.lang.Integer"/>-->
<result column="model_id" property="modelId" jdbcType="INTEGER" javaType="java.lang.Integer"/> <!-- <result column="model_id" property="modelId" jdbcType="INTEGER" javaType="java.lang.Integer"/>-->
<!-- <result column="vehicle_id" property="modelId" jdbcType="INTEGER" javaType="java.lang.Integer"/>--> <!-- <result column="vehicle_id" property="modelId" jdbcType="INTEGER" javaType="java.lang.Integer"/>-->
<association property="company" column="company_id" select="com.xxfc.platform.vehicle.mapper.BranchCompanyMapper.selectByPrimaryKey" /> <association property="company" column="company_id" select="com.xxfc.platform.vehicle.mapper.BranchCompanyMapper.selectByPrimaryKey" />
<association property="vehicleModel" column="model_id" select="com.xxfc.platform.vehicle.mapper.VehicleModelMapper.selectByPrimaryKey" /> <association property="vehicleModel" column="model_id" select="com.xxfc.platform.vehicle.mapper.VehicleModelMapper.selectByPrimaryKey" />
...@@ -243,8 +243,8 @@ ...@@ -243,8 +243,8 @@
where id = #{vehicleId} and status = #{lastStatus} where id = #{vehicleId} and status = #{lastStatus}
</update> </update>
<select id="searchUsable" parameterType="java.util.Map" <select id="searchUsableModel" parameterType="java.util.Map"
resultMap="searchUsableMap"> resultMap="searchUsableModelMap">
select distinct vm.id as model_id, bc.id as company_id select distinct vm.id as model_id, bc.id as company_id
<if test="lon != null and lat != null"> <if test="lon != null and lat != null">
,st_distance_sphere(point(#{lon}, #{lat}), point(bc.longitude, bc.latitude)) as distance ,st_distance_sphere(point(#{lon}, #{lat}), point(bc.longitude, bc.latitude)) as distance
...@@ -252,6 +252,22 @@ ...@@ -252,6 +252,22 @@
<if test=" yearMonthAndParam !=null "> <if test=" yearMonthAndParam !=null ">
,vbi.booked_date ,vbi.booked_date
</if> </if>
<include refid="searchUsableSql"/>
</select>
<select id="searchUsableVehicle" parameterType="java.util.Map"
resultType="com.xxfc.platform.vehicle.entity.Vehicle">
select vm.*
<if test="lon != null and lat != null">
,st_distance_sphere(point(#{lon}, #{lat}), point(bc.longitude, bc.latitude)) as distance
</if>
<if test=" yearMonthAndParam !=null ">
,vbi.booked_date
</if>
<include refid="searchUsableSql"/>
</select>
<sql id="searchUsableSql">
from vehicle v from vehicle v
<if test=" yearMonthAndParam !=null "> <if test=" yearMonthAndParam !=null ">
left join left join
...@@ -272,6 +288,9 @@ ...@@ -272,6 +288,9 @@
) )
</foreach> </foreach>
</if> </if>
<if test=" modelId != null ">
and v.model_id = #{modelId}
</if>
<if test=" catas != null "> <if test=" catas != null ">
and vc.cata_id in ( and vc.cata_id in (
<foreach collection="catas" index="catasIndex" item="cata" separator=","> <foreach collection="catas" index="catasIndex" item="cata" separator=",">
...@@ -284,6 +303,6 @@ ...@@ -284,6 +303,6 @@
order by order by
distance asc distance asc
</if> </if>
</select> </sql>
</mapper> </mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment