Commit b740683d authored by 周健威's avatar 周健威

修改订单相关

parent 5fed9a2c
......@@ -86,6 +86,19 @@
<version>3.1.0</version>
</dependency>
<!-- 通用工具集合 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.5.10</version>
</dependency>
<!-- swagger注解 -->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.13</version>
</dependency>
</dependencies>
......
package com.github.wxiaoqi.security.common.util;
import cn.hutool.core.bean.BeanUtil;
import com.github.wxiaoqi.security.common.vo.PageParam;
import java.util.LinkedHashMap;
import java.util.Map;
......@@ -27,6 +30,23 @@ public class Query extends LinkedHashMap<String, Object> {
this.remove("limit");
}
/**
* zjw新增
* @param pageParam
*/
public Query(PageParam pageParam){
this.putAll(BeanUtil.beanToMap(pageParam));
//分页参数
if(pageParam.getPage() != null) {
this.page = pageParam.getPage();
}
if(pageParam.getLimit() != null) {
this.limit = pageParam.getLimit();
}
this.remove("page");
this.remove("limit");
}
public int getPage() {
return page;
......@@ -43,4 +63,8 @@ public class Query extends LinkedHashMap<String, Object> {
public void setLimit(int limit) {
this.limit = limit;
}
public LinkedHashMap<String, Object> getSuper() {
return this;
}
}
......@@ -36,8 +36,8 @@ public class PageDataVO<T> {
public static <M> PageDataVO<M> pageInfo(Integer page, Integer limit, List<M> list){
PageHelper.startPage(page,limit);
PageInfo<M> branchCompanyPageInfo = new PageInfo<M>(list);
return pageInfo(branchCompanyPageInfo);
PageInfo<M> listPageInfo = new PageInfo<M>(list);
return pageInfo(listPageInfo);
}
}
package com.github.wxiaoqi.security.common.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class PageParam {
@ApiModelProperty("当前页码")
Integer page;
@ApiModelProperty("每页限制")
Integer limit;
}
......@@ -57,7 +57,8 @@ public class WebConfiguration implements WebMvcConfigurer {
"/menu/**",
"/user/**",
"/api/permissions",
"/api/user/un/**"
"/api/user/un/**",
// "/api/app/**"
};
Collections.addAll(list, urls);
return list;
......
......@@ -21,6 +21,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import com.github.wxiaoqi.security.common.context.BaseContextHandler;
import java.util.List;
import java.util.Map;
......@@ -33,9 +34,9 @@ import static com.github.wxiaoqi.security.auth.common.constatns.CommonConstants.
* @author wanghaobin
* @create 2017-06-08 11:51
*/
@Slf4j
@RestController
@RequestMapping("user")
@Slf4j
public class UserController extends CommonBaseController {
public final static Integer CURRENT_COMPANY = 1;
......
......@@ -10,7 +10,7 @@ spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://10.5.52.3:3306/xxfc_third_platform?useUnicode=true&characterEncoding=UTF-8
url: jdbc:mysql://10.5.52.3:3306/xxfc_order?useUnicode=true&characterEncoding=UTF-8
username: root
password: sslcloud123*()
jackson:
......
......@@ -91,9 +91,9 @@
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.13</version>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>2.9.3</version>
</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 OrderCostEnum {
RentVehicle(1, "租车费用明细"),
;
/**
* 编码
*/
private Integer code;
/**
* 类型描述
*/
private String desc;
private static Map<Integer,String> codeAndDesc = new HashMap<Integer, String>();
OrderCostEnum(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
......@@ -5,6 +5,7 @@ import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
......@@ -15,6 +16,7 @@ import io.swagger.annotations.ApiModelProperty;
* @date 2019-05-24 21:56:10
*/
@Table(name = "base_order")
@Data
public class BaseOrder implements Serializable {
private static final long serialVersionUID = 1L;
......@@ -45,13 +47,13 @@ public class BaseOrder implements Serializable {
private Integer status;
//商品价格
@Column(name = "product_amount")
@Column(name = "goods_amount")
@ApiModelProperty(value = "商品价格")
private BigDecimal productAmount;
private BigDecimal goodsAmount;
//实际价格
@Column(name = "order_amount")
@ApiModelProperty(value = "实际价格")
@ApiModelProperty(value = "订单价格")
private BigDecimal orderAmount;
//详情json信息
......@@ -68,6 +70,13 @@ public class BaseOrder implements Serializable {
@Column(name = "out_trade_no")
@ApiModelProperty(value = "流水号")
private String outTradeNo;
/**
* 用户id
*/
@Column(name = "user_id")
@ApiModelProperty(value = "用户id")
private Integer userId;
//创建时间
@Column(name = "crt_time")
......@@ -108,222 +117,4 @@ public class BaseOrder implements Serializable {
@Column(name = "upd_host")
@ApiModelProperty(value = "更新者ip")
private String updHost;
/**
* 设置:主键
*/
public void setId(Integer id) {
this.id = id;
}
/**
* 获取:主键
*/
public Integer getId() {
return id;
}
/**
* 设置:订单号
*/
public void setNo(String no) {
this.no = no;
}
/**
* 获取:订单号
*/
public String getNo() {
return no;
}
/**
* 设置:订单类型
*/
public void setType(Integer type) {
this.type = type;
}
/**
* 获取:订单类型
*/
public Integer getType() {
return type;
}
/**
* 设置:订单详情id
*/
public void setDetailId(Integer detailId) {
this.detailId = detailId;
}
/**
* 获取:订单详情id
*/
public Integer getDetailId() {
return detailId;
}
/**
* 设置:订单状态
*/
public void setStatus(Integer status) {
this.status = status;
}
/**
* 获取:订单状态
*/
public Integer getStatus() {
return status;
}
/**
* 设置:商品价格
*/
public void setProductAmount(BigDecimal productAmount) {
this.productAmount = productAmount;
}
/**
* 获取:商品价格
*/
public BigDecimal getProductAmount() {
return productAmount;
}
/**
* 设置:实际价格
*/
public void setOrderAmount(BigDecimal orderAmount) {
this.orderAmount = orderAmount;
}
/**
* 获取:实际价格
*/
public BigDecimal getOrderAmount() {
return orderAmount;
}
/**
* 设置:详情json信息
*/
public void setDetailJson(String detailJson) {
this.detailJson = detailJson;
}
/**
* 获取:详情json信息
*/
public String getDetailJson() {
return detailJson;
}
/**
* 设置:第三方类型(支付渠道)
*/
public void setThirdType(Integer thirdType) {
this.thirdType = thirdType;
}
/**
* 获取:第三方类型(支付渠道)
*/
public Integer getThirdType() {
return thirdType;
}
/**
* 设置:流水号
*/
public void setOutTradeNo(String outTradeNo) {
this.outTradeNo = outTradeNo;
}
/**
* 获取:流水号
*/
public String getOutTradeNo() {
return outTradeNo;
}
/**
* 设置:创建时间
*/
public void setCrtTime(Date crtTime) {
this.crtTime = crtTime;
}
/**
* 获取:创建时间
*/
public Date getCrtTime() {
return crtTime;
}
/**
* 设置:创建者id
*/
public void setCrtUser(String crtUser) {
this.crtUser = crtUser;
}
/**
* 获取:创建者id
*/
public String getCrtUser() {
return crtUser;
}
/**
* 设置:创建者名称
*/
public void setCrtName(String crtName) {
this.crtName = crtName;
}
/**
* 获取:创建者名称
*/
public String getCrtName() {
return crtName;
}
/**
* 设置:创建者ip
*/
public void setCrtHost(String crtHost) {
this.crtHost = crtHost;
}
/**
* 获取:创建者ip
*/
public String getCrtHost() {
return crtHost;
}
/**
* 设置:更新时间
*/
public void setUpdTime(Date updTime) {
this.updTime = updTime;
}
/**
* 获取:更新时间
*/
public Date getUpdTime() {
return updTime;
}
/**
* 设置:更新者id
*/
public void setUpdUser(String updUser) {
this.updUser = updUser;
}
/**
* 获取:更新者id
*/
public String getUpdUser() {
return updUser;
}
/**
* 设置:更新者名称
*/
public void setUpdName(String updName) {
this.updName = updName;
}
/**
* 获取:更新者名称
*/
public String getUpdName() {
return updName;
}
/**
* 设置:更新者ip
*/
public void setUpdHost(String updHost) {
this.updHost = updHost;
}
/**
* 获取:更新者ip
*/
public String getUpdHost() {
return updHost;
}
}
package com.xxfc.platform.order.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 费用明细
*
* @author zjw
* @email nishijjo@qq.com
* @date 2019-05-29 11:11:33
*/
@Data
@Table(name = "order_cost_detail")
public class OrderCostDetail implements Serializable {
private static final long serialVersionUID = 1L;
//主键
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键")
private Integer id;
//模板名称
@Column(name = "name")
@ApiModelProperty(value = "模板名称")
private String name;
//模板内容
@Column(name = "template")
@ApiModelProperty(value = "模板内容")
private String template;
}
......@@ -15,7 +15,7 @@ import lombok.Data;
*/
@Data
@Table(name = "order_rent_vehicle_detail")
public class OrderRentVehicleDetail implements Serializable, OrderDetail {
public class OrderRentVehicleDetail implements Serializable{
private static final long serialVersionUID = 1L;
//主键
......@@ -63,11 +63,16 @@ public class OrderRentVehicleDetail implements Serializable, OrderDetail {
@Column(name = "end_addr")
@ApiModelProperty(value = "还车地点")
private String endAddr;
//车辆id
@Column(name = "vehicle_id")
@ApiModelProperty(value = "车辆id")
private Integer vehicleId;
//费用详情
@Column(name = "cost_detail")
@ApiModelProperty(value = "费用详情")
private String costDetail;
//取车城市编号
@Column(name = "start_city")
......@@ -128,6 +133,8 @@ public class OrderRentVehicleDetail implements Serializable, OrderDetail {
@Column(name = "s_time")
@ApiModelProperty(value = "评分时间")
private Long sTime;
@Column(name = "deposit")
@ApiModelProperty(value = "押金")
private Long deposit;
}
package com.xxfc.platform.order.entity;
package com.xxfc.platform.order.entity.inter;
import com.xxfc.platform.order.entity.BaseOrder;
public interface OrderDetail {
Integer getOrderId();
void setOrderId(Integer orderId);
BaseOrder getOrder();
void setOrder(BaseOrder order);
}
package com.xxfc.platform.order.entity.inter;
import com.xxfc.platform.order.entity.BaseOrder;
public interface OrderPrice {
}
......@@ -4,10 +4,8 @@ import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
@Data
public class AddRentVehicleOrderVO extends OrderRentVehicleDetail {
public class AddRentVehicleDTO extends OrderRentVehicleDetail{
//主键
@ApiModelProperty(hidden = true)
private Integer id;
......
package com.xxfc.platform.order.vo.order;
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 lombok.Data;
@Data
public class RentVehicleBO extends OrderRentVehicleDetail implements OrderDetail {
private BaseOrder order;
}
package com.xxfc.platform.order.vo.price;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Data
public class OrderPriceVO {
@ApiModelProperty(value = "订单价格")
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;
}
}
package com.xxfc.platform.order.vo.price;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class RentVehiclePriceVO extends OrderPriceVO{
@ApiModelProperty(value = "车辆价格")
BigDecimal vehicleAmount;
@ApiModelProperty(value = "司机价格")
BigDecimal driverAmount;
@ApiModelProperty(value = "押金价格")
BigDecimal deposit;
@ApiModelProperty(value = "天数")
Integer dayNum;
@ApiModelProperty(value = "车辆个数")
Integer vehicleNum;
@ApiModelProperty(value = "司机个数")
Integer driverNum;
@ApiModelProperty(value = "车型名称")
String modelName;
@ApiModelProperty(value = "车型价格")
BigDecimal modelAmount;
@ApiModelProperty(value = "司机单价")
BigDecimal driverPrice;
}
......@@ -30,6 +30,14 @@
<artifactId>xx-vehicle-api</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.xxfc.platform</groupId>
<artifactId>xx-vehicle-api</artifactId>
<version>2.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
......
......@@ -14,14 +14,11 @@ import org.springframework.scheduling.annotation.EnableScheduling;
@EnableDiscoveryClient
@EnableScheduling
@EnableAceAuthClient
@EnableFeignClients({"com.github.wxiaoqi.security.auth.client.feign", "com.xxfc.platform.order.feign", "com.xxfc.platform.vehicle.feign"})
@EnableFeignClients({"com.github.wxiaoqi.security.auth.client.feign", "com.xxfc.platform"})
@EnableAceCache
@tk.mybatis.spring.annotation.MapperScan(basePackages = "com.xxfc.platform.order.mapper")
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
package com.xxfc.platform.order.biz;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.util.Query;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.mapper.BaseOrderMapper;
import com.xxfc.platform.order.vo.OrderPageVO;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
*
......@@ -17,7 +19,7 @@ import java.util.List;
*/
@Service
public class BaseOrderBiz extends BaseBiz<BaseOrderMapper,BaseOrder> {
public List<OrderPageVO> pageByParm(){
return mapper.pageByParm();
public List<OrderPageVO> pageByParm(Map<String, Object> paramMap){
return mapper.pageByParm(paramMap);
}
}
\ No newline at end of file
package com.xxfc.platform.order.biz;
import org.springframework.stereotype.Service;
import com.xxfc.platform.order.entity.OrderCostDetail;
import com.xxfc.platform.order.mapper.OrderCostDetailMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
/**
* 费用明细
*
* @author zjw
* @email nishijjo@qq.com
* @date 2019-05-29 11:11:33
*/
@Service
public class OrderCostDetailBiz extends BaseBiz<OrderCostDetailMapper,OrderCostDetail> {
}
\ No newline at end of file
......@@ -30,12 +30,19 @@ public class SwaggerConfig {
*/
@Bean
public Docket customDocket(){
ParameterBuilder ticketPar = new ParameterBuilder();
List<Parameter> pars = new ArrayList<Parameter>();
ParameterBuilder ticketPar = new ParameterBuilder();
ticketPar.name("Authorization").description("user Authorization")
.modelRef(new ModelRef("string")).parameterType("header")
.required(false).build(); //header中的ticket参数非必填,传空也可以
ParameterBuilder ticketPar2 = new ParameterBuilder();
ticketPar2.name("x-client-token").description("client Authorization")
.modelRef(new ModelRef("string")).parameterType("header")
.required(false).build(); //header中的ticket参数非必填,传空也可以
pars.add(ticketPar.build()); //根据每个方法名也知道当前方法在设置什么参数
pars.add(ticketPar2.build());
return new Docket(DocumentationType.SWAGGER_2)
.select()
......
......@@ -46,7 +46,8 @@ public class WebConfiguration implements WebMvcConfigurer {
private ArrayList<String> getIncludePathPatterns() {
ArrayList<String> list = new ArrayList<>();
String[] urls = {
"/3p/**"
"/orderRentVehicle/**",
"/baseOrder/**"
};
Collections.addAll(list, urls);
return list;
......
......@@ -5,6 +5,7 @@ import com.xxfc.platform.order.vo.OrderPageVO;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
import java.util.Map;
/**
*
......@@ -14,5 +15,5 @@ import java.util.List;
* @date 2019-05-15 21:30:33
*/
public interface BaseOrderMapper extends Mapper<BaseOrder> {
public List<OrderPageVO> pageByParm();
public List<OrderPageVO> pageByParm(Map<String, Object> paramMap);
}
package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.OrderCostDetail;
import tk.mybatis.mapper.common.Mapper;
/**
* 费用明细
*
* @author zjw
* @email nishijjo@qq.com
* @date 2019-05-29 11:11:33
*/
public interface OrderCostDetailMapper extends Mapper<OrderCostDetail> {
}
package com.xxfc.platform.order.rest;
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.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.CommonBaseController;
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.vo.OrderPageVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -28,9 +36,20 @@ public class BaseOrderController extends CommonBaseController {
@RequestMapping(value = "/page",method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "订单列表")
public ObjectRestResponse<PageDataVO<OrderPageVO>> list(@RequestParam(required = false) Map<String, Object> params){
@IgnoreClientToken
public ObjectRestResponse<PageDataVO<OrderPageVO>> list(QueryOrderDTO dto){
//查询列表数据
Query query = new Query(params);
return new ObjectRestResponse<>().data(PageDataVO.pageInfo(1, 10, baseOrderBiz.pageByParm()));
if(StringUtils.isBlank(BaseContextHandler.getUserID())) {
throw new BaseException(ResultCode.AJAX_WECHAT_NOTEXIST_CODE);
}
dto.setCrtUser(Integer.valueOf(BaseContextHandler.getUserID()));
Query query = new Query(dto);
return new ObjectRestResponse<>().data(PageDataVO.pageInfo(query.getPage(), query.getLimit(), baseOrderBiz.pageByParm(query.getSuper())));
}
@Data
public class QueryOrderDTO extends PageParam {
@ApiModelProperty(hidden = false)
private Integer crtUser;
}
}
\ No newline at end of file
package com.xxfc.platform.order.rest;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.order.biz.OrderCostDetailBiz;
import com.xxfc.platform.order.entity.OrderCostDetail;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("orderCostDetail")
public class OrderCostDetailController extends BaseController<OrderCostDetailBiz,OrderCostDetail> {
}
\ No newline at end of file
package com.xxfc.platform.order.rest;
import cn.hutool.core.bean.BeanUtil;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreClientToken;
import com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.CommonBaseController;
import com.xxfc.platform.order.biz.OrderRentVehicleBiz;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.service.OrderRentVehicleService;
import com.xxfc.platform.order.vo.AddRentVehicleOrderVO;
import com.xxfc.platform.order.vo.AddRentVehicleDTO;
import com.xxfc.platform.order.vo.order.RentVehicleBO;
import com.xxfc.platform.order.vo.price.OrderPriceVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.github.wxiaoqi.security.common.context.BaseContextHandler;
@Controller
@RequestMapping("orderRentVehicle")
@Api(value="租车订单",tags={"租车订单"})
@IgnoreClientToken
public class OrderRentVehicleController extends CommonBaseController {
@Autowired
......@@ -26,9 +35,10 @@ public class OrderRentVehicleController extends CommonBaseController {
@RequestMapping(value = "add",method = RequestMethod.POST)
@ResponseBody
@ApiOperation(value = "确认租车订单")
public ObjectRestResponse<OrderRentVehicleDetail> add(@RequestBody AddRentVehicleOrderVO vo){
orderRentVehicleService.createOrder(vo);
return new ObjectRestResponse<>();
public ObjectRestResponse<OrderRentVehicleDetail> add(@RequestBody AddRentVehicleDTO vo){
RentVehicleBO bo = BeanUtil.toBean(vo, RentVehicleBO.class);
orderRentVehicleService.createOrder(bo);
return new ObjectRestResponse<>().rel(true).data(bo.getOrder());
}
@RequestMapping(value = "list-by-order/{orderId}",method = RequestMethod.GET)
......@@ -37,4 +47,33 @@ public class OrderRentVehicleController extends CommonBaseController {
public ObjectRestResponse<OrderRentVehicleDetail> listByOrder(@PathVariable("orderId") Integer orderId){
return new ObjectRestResponse<>().data(orderRentVehicleBiz.listByOrderId(orderId));
}
@RequestMapping(value = "/app/unauth/calculate-price",method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value = "价格计算")
@IgnoreUserToken
public ObjectRestResponse<OrderPriceVO> calculatePrice(CalculatePriceVO vo){
RentVehicleBO bo = BeanUtil.toBean(vo, RentVehicleBO.class);
return new ObjectRestResponse<>().rel(true).data(orderRentVehicleService.calculatePrice(bo));
}
@Data
public class CalculatePriceVO {
@ApiModelProperty(value = "司机类型 1--公司司机;2--自己司机")
private Integer driverType;
@ApiModelProperty(value = "车型id")
private Integer modelId;
//开始时间
@ApiModelProperty(value = "开始时间")
private Long startTime;
//结束时间
@ApiModelProperty(value = "结束时间")
private Long endTime;
@ApiModelProperty(value = "天数")
private Integer dayNum;
}
}
\ No newline at end of file
package com.xxfc.platform.order.service;
import cn.hutool.core.bean.BeanUtil;
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.process.ResultCode;
import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.xxfc.platform.order.contant.enumerate.OrderTypeEnum;
import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.entity.OrderDetail;
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;
import java.math.BigDecimal;
@Transactional
public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends OrderDetail>{
......@@ -28,12 +34,16 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or
*/
public BaseOrder createOrder() {
BaseOrder baseOrder = new BaseOrder();
//设置订单号
baseOrder.setNo(IdUtil.randomUUID());
//设置订单类型
if(null == orderTypeEnum)
throw new BaseException(ResultCode.NOTEXIST_CODE);
else {
baseOrder.setType(orderTypeEnum.getCode());
}
//设置用户id
baseOrder.setUserId(Integer.valueOf(BaseContextHandler.getUserID()));
return baseOrder;
}
......@@ -43,16 +53,21 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or
*/
public void createOrder(Detail detail) {
BaseOrder order = createOrder();
detail.setOrder(order);
//计算价格
handleCalculate(detail);
//插入baseOrder
baseOrderBiz.insertSelective(order);
createOrderMakeUp(order, detail);
//处理detail
handleDetail(detail);
}
}
/**
* 处理订单子项
* 处理订单详情
* @param detail
*/
public void handleDetail(Detail detail){
detail.setOrderId(detail.getOrder().getId());
detailBiz.insertSelective(detail);
}
......@@ -63,7 +78,7 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or
// public void createOrder(List<Detail> details) {
// BaseOrder order = createOrder();
// for(Detail detail : details) {
// createOrderMakeUp(order, detail);
// preHandleDetail(order, detail);
// }
// handleDetail(details);
// }
......@@ -78,18 +93,25 @@ public abstract class AbstractOrderHandle<Biz extends BaseBiz, Detail extends Or
// }
// }
public void calculatePrice(Detail detail) {
/**
* 计算价格
* @param detail
*/
public OrderPriceVO calculatePrice(Detail detail) {
OrderPriceVO priceVO = new OrderPriceVO();
priceVO.setGoodsAmount(BigDecimal.ZERO);
priceVO.setOrderAmount(BigDecimal.ZERO);
return priceVO;
}
/**
* 子项补充处理
* @param baseOrder
* 计算价格
* @param detail
*/
void createOrderMakeUp(BaseOrder baseOrder, Detail detail){
detail.setOrderId(baseOrder.getId());
public void handleCalculate(Detail detail) {
OrderPriceVO opv = calculatePrice(detail);
BeanUtil.copyProperties(opv, detail.getOrder());
BeanUtil.copyProperties(opv, detail);
}
}
package com.xxfc.platform.order.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.extra.template.Template;
import cn.hutool.extra.template.TemplateConfig;
import cn.hutool.extra.template.TemplateEngine;
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.OrderTypeEnum;
import com.xxfc.platform.order.entity.OrderRentVehicleDetail;
import com.xxfc.platform.order.entity.OrderCostDetail;
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 com.xxfc.platform.vehicle.entity.VehicleModel;
import com.xxfc.platform.vehicle.feign.VehicleFeign;
import lombok.extern.log4j.Log4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.math.BigDecimal;
@Service
@Log4j
public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicleBiz, OrderRentVehicleDetail> {
public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicleBiz, RentVehicleBO> {
private static BigDecimal DRIVER_PRICE = new BigDecimal("600.00");
private static Integer DRIVER_TYPE_COMPANY = 1;
private static BigDecimal DEPOSIT = new BigDecimal("20000.00");
@Autowired
VehicleFeign vehicleFeign;
@Autowired
OrderCostDetailBiz orderCostDetailBiz;
@PostConstruct
public void init(){
......@@ -20,18 +43,72 @@ public class OrderRentVehicleService extends AbstractOrderHandle<OrderRentVehicl
}
@Override
public void handleDetail(OrderRentVehicleDetail detail) {
public void handleDetail(RentVehicleBO bo) {
//获取可用车辆
super.handleDetail(detail);
acquireVehicle(bo);
super.handleDetail(bo);
}
@Override
public void calculatePrice(OrderRentVehicleDetail detail) {
public void handleCalculate(RentVehicleBO bo) {
RentVehiclePriceVO rvpv = calculatePrice(bo);
BeanUtil.copyProperties(rvpv, bo.getOrder());
BeanUtil.copyProperties(rvpv, bo);
bo.setCostDetail(costDetail(rvpv));
}
@Override
public RentVehiclePriceVO calculatePrice(RentVehicleBO detail) {
BigDecimal orderAmount = BigDecimal.ZERO;
BigDecimal goodsAmount = BigDecimal.ZERO;
BigDecimal vehicleAmount = BigDecimal.ZERO;
BigDecimal driverAmount = BigDecimal.ZERO;
//计算价格
//计算车辆费用
// detail.get
VehicleModel vehicleModel = vehicleFeign.get(detail.getModelId()).getData();
vehicleAmount = vehicleAmount.add(vehicleModel.getPrice().multiply(BigDecimal.valueOf(detail.getDayNum())));
if(DRIVER_TYPE_COMPANY.equals(detail.getDriverType())) {
//计算司机费用
driverAmount = driverAmount.add(DRIVER_PRICE.multiply(BigDecimal.valueOf(detail.getDayNum())));
}
//商品价格
goodsAmount = goodsAmount.add(vehicleAmount).add(driverAmount);
//总价格(包含押金)
orderAmount = orderAmount.add(goodsAmount).add(DEPOSIT);
//生成订单明细
RentVehiclePriceVO rvp = new RentVehiclePriceVO();
rvp.setOrderAmount(orderAmount);
rvp.setGoodsAmount(goodsAmount);
rvp.setDriverAmount(driverAmount);
rvp.setVehicleAmount(vehicleAmount);
rvp.setDeposit(DEPOSIT);
rvp.setModelAmount(vehicleModel.getPrice());
rvp.setDriverPrice(DRIVER_PRICE);
rvp.setModelName(vehicleModel.getName());
rvp.setDayNum(detail.getDayNum());
rvp.setVehicleNum(1);
rvp.setDriverNum(1);
return rvp;
}
/**
* 计算费用明细
* @param vo
* @return
*/
private String costDetail(RentVehiclePriceVO vo) {
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig());
OrderCostDetail orderCostDetail = orderCostDetailBiz.selectById(OrderCostEnum.RentVehicle.getCode());
Template template = engine.getTemplate(orderCostDetail.getTemplate());
String result = template.render(Dict.parse(vo));
return result;
}
// super.calculatePrice(item);
private Integer acquireVehicle(RentVehicleBO detail) {
//根据车型、时间、距离,门店,预定车辆
Integer vehicleId = new Integer(1);
return vehicleId;
}
}
......@@ -34,8 +34,14 @@
</discriminator>
</resultMap>
<select id="pageByParm" resultMap="orderPageMap">
select * from base_order;
<select id="pageByParm" parameterType="Map" resultMap="orderPageMap">
select *
from base_order
<where>
<if test="crtUser != null">
crt_user = #{crtUser}
</if>
</where>
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.order.mapper.OrderCostDetailMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.order.entity.OrderCostDetail" id="orderCostDetailMap">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="template" column="template"/>
</resultMap>
</mapper>
\ No newline at end of file
package com.xxfc.platform.order;
import cn.hutool.core.lang.Dict;
import cn.hutool.extra.template.Template;
import cn.hutool.extra.template.TemplateConfig;
import cn.hutool.extra.template.TemplateEngine;
import cn.hutool.extra.template.TemplateUtil;
import com.xxfc.platform.order.vo.price.OrderPriceVO;
import com.xxfc.platform.order.vo.price.RentVehiclePriceVO;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.math.BigDecimal;
@Slf4j
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes={OrderApplication.class})
public class RegionTest {
@Test
public void test() {
//自动根据用户引入的模板引擎库的jar来自动选择使用的引擎
//TemplateConfig为模板引擎的选项,可选内容有字符编码、模板路径、模板加载方式等,默认通过模板字符串渲染
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig());
//假设我们引入的是Beetl引擎,则:
Template template = engine.getTemplate("{\"key\":\"费用明细\",\"val\":\"\",\"children\":[{\"key\":\"车辆租赁费\",\"val\":\"¥${vehicleAmount}\",\"children\":[{\"key\":\"${modelName}\",\"val\":\"¥${modelAmount}/天\"},{\"key\":\"租用天数\",\"val\":\"${dayNum}天\"},{\"key\":\"房车数量\",\"val\":\"${vehicleNum}辆\"}]},{\"key\":\"服务费(司机)\",\"val\":\"¥${driverAmount}\",\"children\":[{\"key\":\"欣新司机\",\"val\":\"¥${driverPrice}/天\"},{\"key\":\"司机数量\",\"val\":\"{driverNum}个\"},{\"key\":\"房车数量\",\"val\":\"${dayNum}天\"}]},{\"key\":\"用车押金\",\"val\":\"¥${deposit}\"}]}");
//Dict本质上为Map,此处可用Map
// String result = template.render(Dict.create().set("name", "Hutool").set("name2", "Hutool2"));
String result = "";
//template.render(
//Dict.parse(new RentVehiclePriceVO(new BigDecimal("126800.03"), new BigDecimal("106800.03"), new BigDecimal("105000.03"), new BigDecimal("1800"), new BigDecimal("20000"))));
// RentVehiclePriceVO.builder()
// .orderAmount(new BigDecimal("126800.03"))
// .goodsAmount(new BigDecimal("106800.03"))
// .vehicleAmount(new BigDecimal("105000.03"))
// .driverAmount(new BigDecimal("1800"))
// .deposit(new BigDecimal("20000")).build()
//输出:Hello Hutool
log.info(result);
}
}
package com.xxfc.platform.vehicle.constant;
public class VehicleConstant {
public static final Integer USER_SYS = -1;
public static final Integer USER_APP = -2;
}
......@@ -89,4 +89,6 @@ public class BranchCompany {
private String companyPic;
private Integer zoneId;
private String phone;
}
\ No newline at end of file
......@@ -2,21 +2,22 @@ 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.feign.dto.AppUserDTO;
import com.xxfc.platform.vehicle.feign.dto.UserDTO;
import com.xxfc.platform.vehicle.entity.VehicleModel;
import org.springframework.cloud.openfeign.FeignClient;
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.*;
/**
* Created by ace on 2017/9/15.
*/
//@FeignClient(value = "${auth.serviceId}",configuration = {})
@FeignClient("xx-vehicle")
public interface VehicleFeign{
@FeignClient(name = "vehicle")
public interface VehicleFeign {
@GetMapping(value = "/vehicleModel/{id}")
public ObjectRestResponse<VehicleModel> get(@PathVariable("id") int id);
//修改评分
@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);
}
package com.xxfc.platform.vehicle.feign.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
@Data
public class FeignBookVehicleDTO {
//根据车型、时间、距离,门店
@ApiModelProperty("预定开始时间")
String bookStartDate;
@ApiModelProperty("预定结束时间")
String bookEndDate;
@ApiModelProperty("车型id")
Integer modelId;
@ApiModelProperty("经度")
Double lon;
@ApiModelProperty("纬度")
Double lat;
@ApiModelProperty("门店id")
Integer companyId;
}
package com.xxfc.platform.vehicle.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Map;
......@@ -9,24 +10,31 @@ public class BookVehicleVo {
/**
* 车辆id
*/
@ApiModelProperty("车辆id")
private String vehicle;
/**
* 预定目标日期(开始)
*/
@ApiModelProperty("预定目标日期(开始)")
private String bookStartDate;
/**
* 预定目标日期(结束)
*/
@ApiModelProperty("预定目标日期(结束)")
private String bookEndDate;
/**
* 取消预定目标日期(开始)
*/
@ApiModelProperty("取消预定目标日期(开始)")
private String unbookStartDate;
/**
* 取消预定目标日期(结束)
*/
@ApiModelProperty("取消预定目标日期(结束)")
private String unbookEndDate;
/**
......
package com.xxfc.platform.vehicle.vo;
import com.github.wxiaoqi.security.common.vo.PageParam;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
......@@ -11,30 +15,40 @@ import java.util.List;
import static java.time.LocalDateTime.ofEpochSecond;
@Data
public class UsableVeicleDTO {
public class UsableVeicleDTO extends PageParam {
public static final DateTimeFormatter DEFAULT_DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
Integer page;
Integer limit;
@ApiModelProperty("城市")
Integer addrCity;
String lon;
String lat;
@ApiModelProperty("经度")
Double lon;
@ApiModelProperty("纬度")
Double lat;
@ApiModelProperty(hidden = true)
String startDate;
@ApiModelProperty(hidden = true)
String endDate;
@ApiModelProperty("开始时间戳")
Long startDateTamp;
@ApiModelProperty("结束时间戳")
Long endDateTamp;
@ApiModelProperty("开始价格")
String priceStart;
@ApiModelProperty("结束价格")
String priceEnd;
@ApiModelProperty("分类逗号分割")
String catasStr;
@ApiModelProperty(value = "分类列表")
List<Integer> catas;
public void setStartDateTamp(Long startDateTamp) {
this.startDateTamp = startDateTamp;
this.startDate = DEFAULT_DATE_TIME_FORMATTER.format(LocalDateTime.ofEpochSecond(startDateTamp, 0, ZoneOffset.ofHours(8)));
this.startDateTamp = startDateTamp;
System.out.println(DEFAULT_DATE_TIME_FORMATTER.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(startDateTamp), ZoneOffset.ofHours(8))));
this.startDate = DEFAULT_DATE_TIME_FORMATTER.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(startDateTamp), ZoneOffset.ofHours(8)));
}
public void setEndDateTamp(Long endDateTamp) {
this.endDateTamp = endDateTamp;
this.endDate = DEFAULT_DATE_TIME_FORMATTER.format(LocalDateTime.ofEpochSecond(endDateTamp, 0, ZoneOffset.ofHours(8)));
this.endDate = DEFAULT_DATE_TIME_FORMATTER.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(endDateTamp), ZoneOffset.ofHours(8)));
}
}
\ No newline at end of file
......@@ -533,9 +533,9 @@ public class VehicleBiz extends BaseBiz<VehicleMapper, Vehicle> {
* @param id
*/
public void checkIfVehicleExists(String id){
Vehicle param = new Vehicle();
param.setId(id);
Integer count = mapper.selectCount(param);
Integer count = mapper.selectCount(new Vehicle(){{
setId(id);
}});
if(count<=0){
throw new CustomIllegalParamException(" no such vehicle");
}
......
......@@ -270,4 +270,17 @@ public class VehicleController extends BaseController<VehicleBiz> {
}
return new ObjectRestResponse<>().data(vehicleBiz.searchUsable(dto)).rel(true);
}
/**
* 租车触发的申请预定车辆
*
* @param bookVehicleVo
* @return
*/
@RequestMapping(value = "/rent/book/vehicle", method = RequestMethod.POST)
public RestResponse<Integer> rentApplyVehicle(@RequestBody BookVehicleVo bookVehicleVo) throws Exception {
Integer operatorId = Integer.parseInt(BaseContextHandler.getUserID());
String userName = BaseContextHandler.getName();
return baseBiz.applyVehicle4Employee(operatorId, bookVehicleVo, userName);
}
}
......@@ -4,7 +4,7 @@
<resultMap id="searchUsableMap" type="com.xxfc.platform.vehicle.vo.UsableVehicleVO">
<!-- <collection column="company_id" property="id" ofType="com.xxfc.platform.vehicle.entity.BranchCompany" select="com.xxfc.platform.vehicle.mapper.BranchCompanyMapper.selectByPrimaryKey" />-->
<result column="park_branch_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="vehicle_id" property="modelId" jdbcType="INTEGER" javaType="java.lang.Integer"/>-->
<association property="company" column="company_id" select="com.xxfc.platform.vehicle.mapper.BranchCompanyMapper.selectByPrimaryKey" />
......@@ -80,7 +80,7 @@
and v.insurance_company = #{insuranceCompany}
</if>
<if test="vin !=null and vin != ''">
and v.vin = #{vin}
and v.vin = #{vin}a
</if>
<if test="subordinateBranch !=null">
and v.subordinate_branch = #{subordinateBranch}
......@@ -246,21 +246,22 @@
<select id="searchUsable" parameterType="java.util.Map"
resultMap="searchUsableMap">
select distinct vm.id as model_id, bc.id as company_id
# , v.id as vehicle_id
<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>
from vehicle v
from vehicle v
<if test=" yearMonthAndParam !=null ">
left join
vehicle_book_info vbi on v.`id` = vbi.vehicle
</if>
left join vehicle_model vm on v.model_id = vm.id
left join branch_company bc on v.park_branch_company_id = bc.id
left join vehicle_cata vc on vm.id = vc.vehicle_model_id
<if test=" catas != null">
left join vehicle_cata vc on vm.id = vc.vehicle_model_id
</if>
<where>
<!-- 若需根据预定日期条件查询,针对换为位操作 -->
<if test=" yearMonthAndParam !=null ">
......
package com.xxfc.vehicle;
package com.xxfc.platform.vehicle;
import cn.hutool.core.comparator.PinyinComparator;
import cn.hutool.core.date.DateUnit;
......
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