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

修改代码

parent 5d3ce359
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.util.Date;
import java.util.Random;
public class OrderUtil {
public static final String DEFAULT_MID = "00";
public static final String APP_MID = "01";
static Date today = new Date();
static int orderIndex = 0;
@SuppressWarnings("deprecation")
private static String getIndex() {
private static String getIndex(String midFix) {
if(StrUtil.isBlank(midFix)) {
midFix = DEFAULT_MID;
}
Date n = new Date();
SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String currTime = outFormat.format(n);
......@@ -27,10 +35,10 @@ public class OrderUtil {
today = n;
orderIndex = 1;
}
if (orderIndex > 999999) {
if (orderIndex > 9999) {
orderIndex = 1;
}
String indexString = String.format("%s%06d", currTime, orderIndex);
String indexString = String.format("%s%s%04d", currTime, midFix, orderIndex);
return indexString;
}
......@@ -41,7 +49,18 @@ public class OrderUtil {
* @return
*/
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;
}
......
......@@ -128,6 +128,24 @@
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</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>
<build>
<finalName>ace-gate</finalName>
......
......@@ -4,6 +4,7 @@ import com.github.wxiaoqi.security.auth.client.EnableAceAuthClient;
import com.github.wxiaoqi.security.gate.utils.DBLog;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
......@@ -11,7 +12,8 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
* @author ace
* @create 2018/3/12.
*/
@SpringBootApplication
//@SpringBootApplication
@SpringCloudApplication
@EnableDiscoveryClient
@EnableAceAuthClient
@EnableFeignClients({"com.github.wxiaoqi.security.auth.client.feign","com.github.wxiaoqi.security.gate.feign"})
......
package com.github.wxiaoqi.security.gate.config;
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.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,8 +249,10 @@ public class AccessGatewayFilter implements GlobalFilter {
*/
private boolean isStartWith(String requestUri) {
boolean flag = false;
if(requestUri.contains(GATE_WAY_UNAUTH)){
return true;
for (String s : GATE_WAY_UNAUTH.split(",")) {
if(requestUri.contains(s)) {
return true;
}
}
for (String s : startWith.split(",")) {
if (requestUri.startsWith(s)) {
......
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 @@
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.6.0.RELEASE</version>
<version>1.8.0.RELEASE</version>
</dependency>
</dependencies>
......
......@@ -11,4 +11,19 @@
<version>2.0-SNAPSHOT</version>
<groupId>com.xxfc.platform</groupId>
<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>
\ 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
......@@ -55,6 +55,11 @@ public class BaseOrder implements Serializable {
@Column(name = "order_amount")
@ApiModelProperty(value = "订单价格")
private BigDecimal orderAmount;
//实际价格
@Column(name = "real_amount")
@ApiModelProperty(value = "实际价格")
private BigDecimal realAmount;
//详情json信息
@Column(name = "detail_json")
......@@ -77,6 +82,20 @@ public class BaseOrder implements Serializable {
@Column(name = "user_id")
@ApiModelProperty(value = "用户id")
private Integer userId;
/**
* 订单图片
*/
@Column(name = "picture")
@ApiModelProperty(value = "订单图片")
private String picture;
/**
* 订单图片
*/
@Column(name = "name")
@ApiModelProperty(value = "名称")
private String name;
//创建时间
@Column(name = "crt_time")
......
......@@ -28,6 +28,11 @@ public class OrderRentVehicleDetail implements Serializable{
@Column(name = "order_id")
@ApiModelProperty(value = "基础订单id")
private Integer orderId;
//基础订单id
@Column(name = "name")
@ApiModelProperty(value = "名称")
private String name;
//创建时间
@Column(name = "crt_time")
......@@ -67,7 +72,7 @@ public class OrderRentVehicleDetail implements Serializable{
//车辆id
@Column(name = "vehicle_id")
@ApiModelProperty(value = "车辆id")
private Integer vehicleId;
private String vehicleId;
//费用详情
@Column(name = "cost_detail")
......
......@@ -3,6 +3,11 @@ package com.xxfc.platform.order.entity.inter;
import com.xxfc.platform.order.entity.BaseOrder;
public interface OrderDetail {
public Integer getId();
public void setId(Integer id);
Integer getOrderId();
void setOrderId(Integer orderId);
......
......@@ -4,16 +4,84 @@ import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Data
public class AddRentVehicleDTO extends OrderRentVehicleDetail{
//主键
@ApiModelProperty(hidden = true)
private Integer id;
//基础订单id
@ApiModelProperty(hidden = true)
private Integer orderId;
//车辆id
@ApiModelProperty(hidden = true)
private Integer vehicleId;
public class AddRentVehicleDTO{
//开始时间
@Column(name = "start_time")
@ApiModelProperty(value = "开始时间")
private Long startTime;
//结束时间
@Column(name = "end_time")
@ApiModelProperty(value = "结束时间")
private Long endTime;
//天数
@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;
@Data
public class OrderPageVO extends BaseOrder {
List<Map> orderItems;
Map detail;
}
......@@ -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.OrderRentVehicleDetail;
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;
@Data
public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail {
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 {
public BigDecimal orderAmount;
@ApiModelProperty(value = "商品价格")
public BigDecimal goodsAmount;
public BigDecimal getOrderAmount() {
return orderAmount;
}
public void setOrderAmount(BigDecimal orderAmount) {
this.orderAmount = orderAmount;
}
public BigDecimal getGoodsAmount() {
return goodsAmount;
}
public void setGoodsAmount(BigDecimal goodsAmount) {
this.goodsAmount = goodsAmount;
}
@ApiModelProperty(value = "实际价格")
public BigDecimal realAmount;
}
......@@ -26,4 +26,6 @@ public class RentVehiclePriceVO extends OrderPriceVO{
BigDecimal modelAmount;
@ApiModelProperty(value = "司机单价")
BigDecimal driverPrice;
@ApiModelProperty(value = "费用详情")
private String costDetail;
}
package com.xxfc.platform.order.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
......@@ -23,6 +24,9 @@ import java.util.List;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Value("${server.port}")
String port;
/**
* Every Docket bean is picked up by the swagger-mvc framework - allowing for multiple
......@@ -45,6 +49,7 @@ public class SwaggerConfig {
pars.add(ticketPar2.build());
return new Docket(DocumentationType.SWAGGER_2)
.host("10.1.37.248:"+port)
.select()
.apis(RequestHandlerSelectors.basePackage("com.xxfc.platform.order"))
//.apis(RequestHandlerSelectors.any())
......@@ -56,7 +61,7 @@ public class SwaggerConfig {
ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("api swagger document")
.description("前后端联调swagger api 文档")
.description("前后端联调swagger api 文档")
.version("2.1.5.5")
.build();
}
......
......@@ -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.UserAuthRestInterceptor;
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.Configuration;
import org.springframework.context.annotation.Primary;
......@@ -23,8 +24,9 @@ public class WebConfiguration implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getCorsInterceptor()).addPathPatterns("/**");
registry.addInterceptor(getServiceAuthRestInterceptor()).
addPathPatterns(getIncludePathPatterns()).addPathPatterns("/3p/**");
addPathPatterns(getIncludePathPatterns());
registry.addInterceptor(getUserAuthRestInterceptor()).
addPathPatterns(getIncludePathPatterns());
}
......@@ -34,6 +36,11 @@ public class WebConfiguration implements WebMvcConfigurer {
return new ServiceAuthRestInterceptor();
}
@Bean
CorsInterceptor getCorsInterceptor() {
return new CorsInterceptor();
}
@Bean
UserAuthRestInterceptor getUserAuthRestInterceptor() {
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;
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.common.context.BaseContextHandler;
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.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.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.github.wxiaoqi.security.common.vo.PageParam;
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.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.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
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.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Map;
import java.math.BigDecimal;
@Controller
@RequestMapping("baseOrder")
@Api(value="订单",tags={"订单"})
@Slf4j
public class BaseOrderController extends CommonBaseController {
@Autowired
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)
@ResponseBody
@ApiOperation(value = "订单列表")
......@@ -47,9 +74,87 @@ public class BaseOrderController extends CommonBaseController {
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
public class QueryOrderDTO extends PageParam {
@ApiModelProperty(hidden = false)
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;
import com.xxfc.platform.order.vo.AddRentVehicleDTO;
import com.xxfc.platform.order.vo.order.RentVehicleBO;
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.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
......@@ -52,7 +53,7 @@ public class OrderRentVehicleController extends CommonBaseController {
@ResponseBody
@ApiOperation(value = "价格计算")
@IgnoreUserToken
public ObjectRestResponse<OrderPriceVO> calculatePrice(CalculatePriceVO vo){
public ObjectRestResponse<RentVehiclePriceVO> calculatePrice(CalculatePriceVO vo){
RentVehicleBO bo = BeanUtil.toBean(vo, RentVehicleBO.class);
return new ObjectRestResponse<>().rel(true).data(orderRentVehicleService.calculatePrice(bo));
}
......
......@@ -5,13 +5,14 @@ import cn.hutool.core.util.IdUtil;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.context.BaseContextHandler;
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.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.entity.BaseOrder;
import com.xxfc.platform.order.entity.inter.OrderDetail;
import com.xxfc.platform.order.vo.price.OrderPriceVO;
import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
......@@ -32,32 +33,40 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or
* 创建基础订单
* @return
*/
public BaseOrder createOrder() {
public BaseOrder createBaseOrder() {
BaseOrder baseOrder = new BaseOrder();
//设置订单号
baseOrder.setNo(IdUtil.randomUUID());
baseOrder.setNo(OrderUtil.GetOrderNumber("", OrderUtil.APP_MID));
//设置订单类型
if(null == orderTypeEnum)
throw new BaseException(ResultCode.NOTEXIST_CODE);
else {
baseOrder.setType(orderTypeEnum.getCode());
}
//设置订单状态
baseOrder.setStatus(OrderStatusEnum.ORDER_CRT.getCode());
//设置用户id
baseOrder.setUserId(Integer.valueOf(BaseContextHandler.getUserID()));
return baseOrder;
}
public void initDetail(Detail detail) {
BaseOrder order = createBaseOrder();
detail.setOrder(order);
}
/**
* 创建订单及其子项
* @param detail
*/
public void createOrder(Detail detail) {
BaseOrder order = createOrder();
detail.setOrder(order);
//初始化
initDetail(detail);
//计算价格
handleCalculate(detail);
//插入baseOrder
baseOrderBiz.insertSelective(order);
baseOrderBiz.insertSelective(detail.getOrder());
//处理detail
handleDetail(detail);
}
......@@ -69,6 +78,8 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or
public void handleDetail(Detail detail){
detail.setOrderId(detail.getOrder().getId());
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
OrderPriceVO priceVO = new OrderPriceVO();
priceVO.setGoodsAmount(BigDecimal.ZERO);
priceVO.setOrderAmount(BigDecimal.ZERO);
priceVO.setRealAmount(BigDecimal.ZERO);
return priceVO;
}
......
......@@ -9,6 +9,7 @@ import cn.hutool.extra.template.TemplateUtil;
import com.xxfc.platform.order.biz.OrderCostDetailBiz;
import com.xxfc.platform.order.biz.OrderRentVehicleBiz;
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.entity.OrderCostDetail;
import com.xxfc.platform.order.vo.order.RentVehicleBO;
......@@ -42,10 +43,25 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
this.orderTypeEnum = OrderTypeEnum.RentVehicle;
}
@Override
public void initDetail(RentVehicleBO bo) {
super.initDetail(bo);
VehicleModel vehicleModel = vehicleFeign.get(bo.getModelId()).getData();
bo.setVehicleModel(vehicleModel);
}
@Override
public void handleDetail(RentVehicleBO 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);
}
......@@ -54,7 +70,6 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
RentVehiclePriceVO rvpv = calculatePrice(bo);
BeanUtil.copyProperties(rvpv, bo.getOrder());
BeanUtil.copyProperties(rvpv, bo);
bo.setCostDetail(costDetail(rvpv));
}
@Override
......@@ -83,6 +98,7 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
rvp.setGoodsAmount(goodsAmount);
rvp.setDriverAmount(driverAmount);
rvp.setVehicleAmount(vehicleAmount);
rvp.setRealAmount(orderAmount);
rvp.setDeposit(DEPOSIT);
rvp.setModelAmount(vehicleModel.getPrice());
rvp.setDriverPrice(DRIVER_PRICE);
......@@ -90,6 +106,8 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
rvp.setDayNum(detail.getDayNum());
rvp.setVehicleNum(1);
rvp.setDriverNum(1);
detail.setCostDetail(costDetail(rvp));
return rvp;
}
......@@ -103,12 +121,14 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
OrderCostDetail orderCostDetail = orderCostDetailBiz.selectById(OrderCostEnum.RentVehicle.getCode());
Template template = engine.getTemplate(orderCostDetail.getTemplate());
String result = template.render(Dict.parse(vo));
vo.setCostDetail(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;
}
}
......@@ -29,7 +29,7 @@
<result javaType="Integer" column="type" property="type"></result>
<discriminator javaType="Integer" column="type">
<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>
</discriminator>
</resultMap>
......@@ -39,9 +39,14 @@
from base_order
<where>
<if test="crtUser != null">
crt_user = #{crtUser}
and crt_user = #{crtUser}
</if>
<if test="status != null">
and status = #{status}
</if>
</where>
order by crt_time desc;
</select>
</mapper>
\ No newline at end of file
......@@ -9,7 +9,13 @@
where order_id = #{orderId}
</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 round(IFNULL (AVG(score),0)) score FROM order_rent_vehicle_detail WHERE model_id=#{modelId}
</select>
SELECT round(IFNULL (AVG(score),0)) score FROM order_rent_vehicle_detail WHERE model_id=#{modelId}
</select>
</mapper>
\ No newline at end of file
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{
@ApiModelProperty(value = "回调地址")
private String notifyUrl;
//支付金额
//支付金额
@ApiModelProperty(value = "支付金额")
private Integer amount;
......
......@@ -49,7 +49,7 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper,OrderPay> {
Integer amount=orderPayVo.getAmount();
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);
if(!StringUtils.isBlank(jsParam))
{
......
......@@ -2,9 +2,13 @@ package com.xxfc.platform.universal.biz;
import com.alibaba.fastjson.JSONObject;
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.SystemConfig;
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.weixin.api.WxPayRefundUtils;
import com.xxfc.platform.universal.weixin.util.Snowflake;
......@@ -13,10 +17,6 @@ import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.StringUtils;
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;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.vehicle.common.RestResponse;
import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.vo.BookVehicleVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
......@@ -18,6 +19,6 @@ public interface VehicleFeign {
@RequestMapping(value = "/vehicleModel/app/addScore", method = RequestMethod.GET)
public RestResponse addScore(@RequestParam(value="id")Integer id, @RequestParam(value="score")Integer score);
// @PostMapping(value = "/vehicleInfo/{id}")
// public ObjectRestResponse<VehicleModel> vehicleInfo(@PathVariable("id") int id);
@RequestMapping(value = "/rent/book/vehicle", method = RequestMethod.POST)
public RestResponse<Integer> rentApplyVehicle(@RequestBody BookVehicleVo bookVehicleVo);
}
......@@ -40,41 +40,49 @@ public class BookVehicleVo {
/**
* 提车地点
*/
@ApiModelProperty("提车地点")
private String liftAddr;
/**
* 提车地点
* 提车公司
*/
@ApiModelProperty("提车公司")
private Integer liftCompany;
/**
* 目的地
*/
@ApiModelProperty("目的地")
private String destination;
/**
* 备注
*/
@ApiModelProperty("备注")
private String remark;
/**
* 随车物品id以及数量 List<Map<id,数量>>
*/
@ApiModelProperty("随车物品id以及数量 List<Map<id,数量>>")
Map<Integer,Integer> selectedAccItem;
/**
* 提车阶段里程数
*/
@ApiModelProperty("提车阶段里程数")
private Integer mileageLift;
/**
* 还车阶段里程数
*/
@ApiModelProperty("还车阶段里程数")
private Integer mileageRet;
/**
* 是否违章
*/
@ApiModelProperty("是否违章")
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;
import java.util.List;
@Data
public class UsableVehicleVO {
public class UsableVehicleModelVO {
//车辆id
Integer modelId;
Vehicle vehicle;
BigDecimal distance;
VehicleModel vehicleModel;
// String companyName;
BranchCompany company;
}
\ No newline at end of file
......@@ -829,8 +829,7 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
return zoneCompanyIds.parallelStream().distinct().collect(Collectors.toList());
}
public PageDataVO<UsableVehicleVO> searchUsable(UsableVeicleDTO dto){
//adjustBookedInfoParam(params, );
public PageDataVO<UsableVehicleModelVO> searchUsableModel(UsableVeicleDTO dto){
Map<String, Object> params = BeanUtil.beanToMap(dto);
List<String> notBookedDates = Lists.newArrayList();
if(StringUtils.isNotBlank(dto.getStartDate())&&
......@@ -855,8 +854,38 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
fillBookedDateSearchParam(params,yearMonthAndDate,yearMonthAndDateNotBooked);
PageHelper.startPage(dto.getPage(), dto.getLimit());
List<UsableVehicleVO> lists = mapper.searchUsable(params);
PageInfo<UsableVehicleVO> usableVehicleInfo = new PageInfo<>(lists);
List<UsableVehicleModelVO> lists = mapper.searchUsableModel(params);
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);
}
}
package com.xxfc.platform.vehicle.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
......@@ -23,6 +24,9 @@ import java.util.List;
@Configuration
@EnableSwagger2
public class SwaggerConfig{
@Value("${server.port}")
String port;
/**
* Every Docket bean is picked up by the swagger-mvc framework - allowing for multiple
......@@ -38,6 +42,7 @@ public class SwaggerConfig{
pars.add(ticketPar.build()); //根据每个方法名也知道当前方法在设置什么参数
return new Docket(DocumentationType.SWAGGER_2)
.host("10.1.37.248:"+port)
.select()
.apis(RequestHandlerSelectors.basePackage("com.xxfc.platform.vehicle"))
//.apis(RequestHandlerSelectors.any())
......
......@@ -3,7 +3,7 @@ package com.xxfc.platform.vehicle.mapper;
import com.xxfc.platform.vehicle.entity.Vehicle;
import com.xxfc.platform.vehicle.vo.AddOrUpdateVehicleVo;
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 tk.mybatis.mapper.common.Mapper;
......@@ -29,5 +29,7 @@ public interface VehicleMapper extends Mapper<Vehicle> {
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;
import com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.vo.UsableVehicleVO;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* 车型
*
......
package com.xxfc.platform.vehicle.rest;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
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.config.UserAuthConfig;
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.vo.PageDataVO;
import com.xxfc.platform.vehicle.biz.VehicleBiz;
......@@ -36,6 +38,8 @@ import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import static com.xxfc.platform.vehicle.constant.VehicleConstant.USER_APP;
@RestController
@RequestMapping("/vehicleInfo")
@Slf4j
......@@ -262,25 +266,37 @@ public class VehicleController extends BaseController<VehicleBiz> {
@ApiOperation("可用车辆查询")
@RequestMapping(value = "/rent/usable-vehicle", method = RequestMethod.GET)
@IgnoreUserToken
public ObjectRestResponse<PageDataVO<UsableVehicleVO>> rentUsableVehicle(UsableVeicleDTO dto) throws Exception {
public ObjectRestResponse<PageDataVO<UsableVehicleModelVO>> rentUsableVehicle(UsableVeicleDTO dto) throws Exception {
//根据时间 获得 可用车辆
//结合车型
if(StringUtils.isNotBlank(dto.getCatasStr())) {
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
*/
@ApiOperation("租车触发的申请预定车辆")
@RequestMapping(value = "/rent/book/vehicle", method = RequestMethod.POST)
public RestResponse<Integer> rentApplyVehicle(@RequestBody BookVehicleVo bookVehicleVo) throws Exception {
Integer operatorId = Integer.parseInt(BaseContextHandler.getUserID());
public RestResponse<String> rentApplyVehicle(@RequestBody RentVehicleBookDTO dto) throws Exception {
//默认USER_APP 预约
Integer operatorId = USER_APP;
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);
//new RestResponse<String>();
//baseBiz.applyVehicle4Employee(operatorId, bookVehicleVo, userName);
}
}
......@@ -2,10 +2,10 @@
<!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">
<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" />-->
<!-- <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"/>-->
<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" />
......@@ -243,8 +243,8 @@
where id = #{vehicleId} and status = #{lastStatus}
</update>
<select id="searchUsable" parameterType="java.util.Map"
resultMap="searchUsableMap">
<select id="searchUsableModel" parameterType="java.util.Map"
resultMap="searchUsableModelMap">
select distinct vm.id as model_id, bc.id as company_id
<if test="lon != null and lat != null">
,st_distance_sphere(point(#{lon}, #{lat}), point(bc.longitude, bc.latitude)) as distance
......@@ -252,7 +252,23 @@
<if test=" yearMonthAndParam !=null ">
,vbi.booked_date
</if>
from vehicle v
<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
<if test=" yearMonthAndParam !=null ">
left join
vehicle_book_info vbi on v.`id` = vbi.vehicle
......@@ -272,6 +288,9 @@
)
</foreach>
</if>
<if test=" modelId != null ">
and v.model_id = #{modelId}
</if>
<if test=" catas != null ">
and vc.cata_id in (
<foreach collection="catas" index="catasIndex" item="cata" separator=",">
......@@ -284,6 +303,6 @@
order by
distance asc
</if>
</select>
</sql>
</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