增加确认租车,申请还车,绑定车辆,确认还车接口
This commit is contained in:
@ -0,0 +1,23 @@
|
||||
package com.sczx.order.common.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @Author: 张黎
|
||||
* @Date: 2024/03/08/17:42
|
||||
* @Description: 订单状态
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum OrderStatusEnum {
|
||||
WAIT_PAY("WAIT_PAY", "待支付"),
|
||||
WAIT_PICK("WAIT_PICK", "待取车"),
|
||||
RENT_ING("RENT_ING", "租赁中"),
|
||||
WAIT_RETURN("WAIT_RETURN", "待还车"),
|
||||
RENT_END("RENT_END", "已结束"),
|
||||
;
|
||||
private final String code;
|
||||
|
||||
private final String msg;
|
||||
}
|
||||
@ -1,9 +1,10 @@
|
||||
package com.sczx.order.controller;
|
||||
|
||||
import com.sczx.order.common.Result;
|
||||
import com.sczx.order.dto.OrderMainDTO;
|
||||
import com.sczx.order.dto.OrderDTO;
|
||||
import com.sczx.order.dto.RentCarOrderReq;
|
||||
import com.sczx.order.dto.RentCarOrderResultDTO;
|
||||
import com.sczx.order.dto.ReturnCarReq;
|
||||
import com.sczx.order.service.OrderService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@ -31,7 +32,13 @@ public class ClientOrderController {
|
||||
|
||||
@ApiOperation(value = "根据订单查询订单信息")
|
||||
@GetMapping("/getOrderInfoByOrderNo")
|
||||
public Result<OrderMainDTO> getOrderInfoByOrderNo(@RequestParam("orderNo") String orderNo){
|
||||
public Result<OrderDTO> getOrderInfoByOrderNo(@RequestParam("orderNo") String orderNo){
|
||||
return Result.ok(orderService.getOrderInfoByOrderNo(orderNo));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "申请还车")
|
||||
@PostMapping("/requestReturnCar")
|
||||
public Result<OrderDTO> requestReturnCar(@RequestBody ReturnCarReq returnCarReq){
|
||||
return Result.ok(orderService.requestReturnCar(returnCarReq));
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,35 @@
|
||||
package com.sczx.order.controller;
|
||||
|
||||
import com.sczx.order.common.Result;
|
||||
import com.sczx.order.dto.*;
|
||||
import com.sczx.order.service.OrderService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* @Author: 张黎
|
||||
* @Date: 2025/07/25/16:42
|
||||
* @Description:
|
||||
*/
|
||||
@Api(value = "门店订单操作接口", tags = "门店订单操作接口")
|
||||
@RestController
|
||||
@RequestMapping("/storeOrder")
|
||||
public class StoreOrderController {
|
||||
|
||||
@Autowired
|
||||
private OrderService orderService;
|
||||
|
||||
@ApiOperation(value = "绑定车辆")
|
||||
@PostMapping("/bindCarToOrder")
|
||||
public Result<OrderDTO> bindCarToOrder(@RequestBody BindCarToOrderReq bindCarToOrderReq){
|
||||
return Result.ok(orderService.bindCarToOrder(bindCarToOrderReq));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "确认还车")
|
||||
@PostMapping("/confirmReturnCar")
|
||||
public Result<OrderDTO> confirmReturnCar(@RequestBody ReturnCarReq returnCarReq){
|
||||
return Result.ok(orderService.confirmReturnCar(returnCarReq));
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
package com.sczx.order.convert;
|
||||
|
||||
import com.sczx.order.dto.OrderMainDTO;
|
||||
import com.sczx.order.dto.OrderDTO;
|
||||
import com.sczx.order.dto.RentCarOrderReq;
|
||||
import com.sczx.order.dto.SimpleUserInfoDTO;
|
||||
import com.sczx.order.po.OrderMainPO;
|
||||
@ -15,9 +15,9 @@ public interface OrderConvert {
|
||||
|
||||
OrderConvert INSTANCE = Mappers.getMapper(OrderConvert.class);
|
||||
|
||||
OrderMainDTO poToDto(OrderMainPO orderMainPO);
|
||||
OrderDTO poToDto(OrderMainPO orderMainPO);
|
||||
|
||||
OrderMainPO dtoToPo(OrderMainDTO orderMainDTO);
|
||||
OrderMainPO dtoToPo(OrderDTO orderDTO);
|
||||
|
||||
@Mappings({
|
||||
@Mapping(target = "orderId", ignore = true),
|
||||
|
||||
15
src/main/java/com/sczx/order/convert/OrderSubConvert.java
Normal file
15
src/main/java/com/sczx/order/convert/OrderSubConvert.java
Normal file
@ -0,0 +1,15 @@
|
||||
package com.sczx.order.convert;
|
||||
|
||||
import com.sczx.order.dto.OrderSubDTO;
|
||||
import com.sczx.order.po.OrderSubPO;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface OrderSubConvert {
|
||||
OrderSubConvert INSTANCE = Mappers.getMapper(OrderSubConvert.class);
|
||||
OrderSubDTO poToDto(OrderSubPO orderSubPO);
|
||||
List<OrderSubDTO> posToDtos(List<OrderSubPO> orderSubPOList);
|
||||
}
|
||||
16
src/main/java/com/sczx/order/dto/BindCarToOrderReq.java
Normal file
16
src/main/java/com/sczx/order/dto/BindCarToOrderReq.java
Normal file
@ -0,0 +1,16 @@
|
||||
package com.sczx.order.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@ApiModel(value = "绑定车辆到订单请求参数")
|
||||
@Data
|
||||
public class BindCarToOrderReq {
|
||||
|
||||
@ApiModelProperty(value = "订单编号")
|
||||
private String orderNo;
|
||||
|
||||
@ApiModelProperty(value = "车辆ID")
|
||||
private Long vehicleId;
|
||||
}
|
||||
@ -1,7 +1,5 @@
|
||||
package com.sczx.order.dto;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.sczx.order.thirdpart.dto.CarModelSimpleDTO;
|
||||
import com.sczx.order.thirdpart.dto.CompanyStoreDTO;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
@ -10,6 +8,7 @@ import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: 张黎
|
||||
@ -18,7 +17,7 @@ import java.time.LocalDateTime;
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value = "订单dto", description = "租车订单信息")
|
||||
public class OrderMainDTO {
|
||||
public class OrderDTO {
|
||||
|
||||
@ApiModelProperty("订单ID(主键)")
|
||||
private Long orderId;
|
||||
@ -92,6 +91,9 @@ public class OrderMainDTO {
|
||||
@ApiModelProperty("还车时间")
|
||||
private LocalDateTime endRentTime;
|
||||
|
||||
@ApiModelProperty("申请还车时间")
|
||||
private LocalDateTime reqEndRentTime;
|
||||
|
||||
@ApiModelProperty("实际还车时间")
|
||||
private LocalDateTime actEndRentTime;
|
||||
|
||||
@ -115,4 +117,7 @@ public class OrderMainDTO {
|
||||
|
||||
@ApiModelProperty("更新时间")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
@ApiModelProperty("租车子订单信息")
|
||||
private List<OrderSubDTO> orderSubDTOList;
|
||||
}
|
||||
46
src/main/java/com/sczx/order/dto/OrderSubDTO.java
Normal file
46
src/main/java/com/sczx/order/dto/OrderSubDTO.java
Normal file
@ -0,0 +1,46 @@
|
||||
package com.sczx.order.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
@ApiModel(value = "租车订单子表dto", description = "租车订单子表信息")
|
||||
public class OrderSubDTO {
|
||||
|
||||
@ApiModelProperty("子订单ID(主键)")
|
||||
private Long suborderId;
|
||||
|
||||
@ApiModelProperty("关联的订单ID(外键)")
|
||||
private Long orderId;
|
||||
|
||||
@ApiModelProperty("子订单编号")
|
||||
private String suborderNo;
|
||||
|
||||
@ApiModelProperty("子订单类型(首租、续租、逾期、押金、租电等)")
|
||||
private String suborderType;
|
||||
|
||||
@ApiModelProperty("订单金额")
|
||||
private BigDecimal amount;
|
||||
|
||||
@ApiModelProperty("支付方式")
|
||||
private String paymentMethod;
|
||||
|
||||
@ApiModelProperty("车架/电池编号")
|
||||
private String vinBatteryNo;
|
||||
|
||||
@ApiModelProperty("订单产生时间")
|
||||
private LocalDateTime createdAt;
|
||||
|
||||
@ApiModelProperty("支付ID")
|
||||
private String paymentId;
|
||||
|
||||
@ApiModelProperty("实际支付时间")
|
||||
private LocalDateTime paidAt;
|
||||
|
||||
@ApiModelProperty("备注")
|
||||
private String remark;
|
||||
}
|
||||
@ -10,7 +10,7 @@ import lombok.Data;
|
||||
@Data
|
||||
public class RentCarOrderResultDTO {
|
||||
@ApiModelProperty(value = "租车订单信息")
|
||||
private OrderMainDTO orderMainInfo;
|
||||
private OrderDTO orderMainInfo;
|
||||
|
||||
@ApiModelProperty(value = "统一预支付信息")
|
||||
private UnifiedPaymentInfoDTO unifiedPaymentInfo;
|
||||
|
||||
14
src/main/java/com/sczx/order/dto/ReturnCarReq.java
Normal file
14
src/main/java/com/sczx/order/dto/ReturnCarReq.java
Normal file
@ -0,0 +1,14 @@
|
||||
package com.sczx.order.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@ApiModel(value = "还车请求参数")
|
||||
public class ReturnCarReq {
|
||||
|
||||
@ApiModelProperty(value = "订单编号")
|
||||
private String orderNo;
|
||||
|
||||
}
|
||||
@ -3,14 +3,15 @@ package com.sczx.order.po;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 租车订单信息
|
||||
@ -94,6 +95,9 @@ public class OrderMainPO implements Serializable {
|
||||
@ApiModelProperty("还车时间")
|
||||
private LocalDateTime endRentTime;
|
||||
|
||||
@ApiModelProperty("申请还车时间")
|
||||
private LocalDateTime reqEndRentTime;
|
||||
|
||||
@ApiModelProperty("实际还车时间")
|
||||
private LocalDateTime actEndRentTime;
|
||||
|
||||
|
||||
@ -1,9 +1,7 @@
|
||||
package com.sczx.order.service;
|
||||
|
||||
|
||||
import com.sczx.order.dto.OrderMainDTO;
|
||||
import com.sczx.order.dto.RentCarOrderReq;
|
||||
import com.sczx.order.dto.RentCarOrderResultDTO;
|
||||
import com.sczx.order.dto.*;
|
||||
|
||||
public interface OrderService {
|
||||
|
||||
@ -19,5 +17,28 @@ public interface OrderService {
|
||||
* @param orderNo
|
||||
* @return
|
||||
*/
|
||||
OrderMainDTO getOrderInfoByOrderNo(String orderNo);
|
||||
OrderDTO getOrderInfoByOrderNo(String orderNo);
|
||||
|
||||
/**
|
||||
* 绑定车辆到订单
|
||||
* @param bindCarToOrderReq
|
||||
* @return
|
||||
*/
|
||||
OrderDTO bindCarToOrder(BindCarToOrderReq bindCarToOrderReq);
|
||||
|
||||
/**
|
||||
* 申请还车
|
||||
* @param returnCarReq
|
||||
* @return
|
||||
*/
|
||||
OrderDTO requestReturnCar(ReturnCarReq returnCarReq);
|
||||
|
||||
/**
|
||||
* 确认还车
|
||||
* @param returnCarReq
|
||||
* @return
|
||||
*/
|
||||
OrderDTO confirmReturnCar(ReturnCarReq returnCarReq);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
package com.sczx.order.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.sczx.order.common.constant.RedisKeyConstants;
|
||||
import com.sczx.order.common.enums.MiniProgramTypeEnum;
|
||||
import com.sczx.order.common.enums.OrderStatusEnum;
|
||||
import com.sczx.order.common.enums.PaymentTypeEnum;
|
||||
import com.sczx.order.common.enums.SubOrderTypeEnum;
|
||||
import com.sczx.order.convert.OrderConvert;
|
||||
import com.sczx.order.dto.OrderMainDTO;
|
||||
import com.sczx.order.dto.RentCarOrderReq;
|
||||
import com.sczx.order.dto.RentCarOrderResultDTO;
|
||||
import com.sczx.order.dto.SimpleUserInfoDTO;
|
||||
import com.sczx.order.convert.OrderSubConvert;
|
||||
import com.sczx.order.dto.*;
|
||||
import com.sczx.order.exception.InnerException;
|
||||
import com.sczx.order.po.OrderMainPO;
|
||||
import com.sczx.order.po.OrderSubPO;
|
||||
@ -74,6 +74,9 @@ public class OrderServiceImpl implements OrderService {
|
||||
//生成订单主表
|
||||
OrderMainPO orderMainPO = OrderConvert.INSTANCE.subOrderToPo(rentCarOrderReq, userInfoDTO, rentCarRuleDTO);
|
||||
orderMainPO.setOrderNo(OrderUtil.generateOrderNo());
|
||||
//TODO 默认应该是待支付状态,这里先默认支付完成待取车
|
||||
// orderMainPO.setOrderStatus(OrderStatusEnum.WAIT_PAY.getCode());
|
||||
orderMainPO.setOrderStatus(OrderStatusEnum.WAIT_PICK.getCode());
|
||||
orderMainRepo.save(orderMainPO);
|
||||
|
||||
//生成子表订单
|
||||
@ -117,12 +120,12 @@ public class OrderServiceImpl implements OrderService {
|
||||
UnifiedPaymentInfoDTO unifiedPaymentInfoDTO = new UnifiedPaymentInfoDTO();
|
||||
|
||||
//返回订单信息
|
||||
OrderMainDTO orderMainDTO = OrderConvert.INSTANCE.poToDto(orderMainPO);
|
||||
orderMainDTO.setCompanyStoreDTO(companyStoreDTO);
|
||||
orderMainDTO.setCarModelSimpleDTO(carModelSimpleDTO);
|
||||
OrderDTO orderDTO = OrderConvert.INSTANCE.poToDto(orderMainPO);
|
||||
orderDTO.setCompanyStoreDTO(companyStoreDTO);
|
||||
orderDTO.setCarModelSimpleDTO(carModelSimpleDTO);
|
||||
|
||||
RentCarOrderResultDTO rentCarOrderResultDTO = new RentCarOrderResultDTO();
|
||||
rentCarOrderResultDTO.setOrderMainInfo(orderMainDTO);
|
||||
rentCarOrderResultDTO.setOrderMainInfo(orderDTO);
|
||||
rentCarOrderResultDTO.setUnifiedPaymentInfo(unifiedPaymentInfoDTO);
|
||||
|
||||
return rentCarOrderResultDTO;
|
||||
@ -140,17 +143,58 @@ public class OrderServiceImpl implements OrderService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderMainDTO getOrderInfoByOrderNo(String orderNo) {
|
||||
public OrderDTO getOrderInfoByOrderNo(String orderNo) {
|
||||
LambdaQueryWrapper<OrderMainPO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(OrderMainPO::getOrderNo, orderNo);
|
||||
OrderMainPO orderMainPO = orderMainRepo.getOne(queryWrapper);
|
||||
OrderMainDTO orderMainDTO = OrderConvert.INSTANCE.poToDto(orderMainPO);
|
||||
OrderDTO orderDTO = OrderConvert.INSTANCE.poToDto(orderMainPO);
|
||||
//获取门店信息
|
||||
CompanyStoreDTO companyStoreDTO = storeInteg.getStoreById(Integer.valueOf(orderMainPO.getStoreId().toString()));
|
||||
|
||||
CarModelSimpleDTO carModelSimpleDTO = carInteg.getCarModelByModelId(orderMainPO.getCarModelId());
|
||||
orderMainDTO.setCarModelSimpleDTO(carModelSimpleDTO);
|
||||
orderMainDTO.setCompanyStoreDTO(companyStoreDTO);
|
||||
return orderMainDTO;
|
||||
orderDTO.setCarModelSimpleDTO(carModelSimpleDTO);
|
||||
orderDTO.setCompanyStoreDTO(companyStoreDTO);
|
||||
LambdaQueryWrapper<OrderSubPO> orderSubLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
orderSubLambdaQueryWrapper.eq(OrderSubPO::getOrderId,orderMainPO.getOrderId());
|
||||
List<OrderSubPO> orderSubPOList = orderSubRepo.list(orderSubLambdaQueryWrapper);
|
||||
List<OrderSubDTO> orderSubDTOList = OrderSubConvert.INSTANCE.posToDtos(orderSubPOList);
|
||||
orderDTO.setOrderSubDTOList(orderSubDTOList);
|
||||
return orderDTO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderDTO bindCarToOrder(BindCarToOrderReq bindCarToOrderReq) {
|
||||
//变更订单状态,记录租车时间
|
||||
LambdaUpdateWrapper<OrderMainPO> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.set(OrderMainPO::getOrderStatus, OrderStatusEnum.RENT_ING.getCode());
|
||||
updateWrapper.set(OrderMainPO::getStartRentTime, LocalDateTime.now());
|
||||
updateWrapper.set(OrderMainPO::getVehicleId, bindCarToOrderReq.getVehicleId());
|
||||
updateWrapper.eq(OrderMainPO::getOrderNo, bindCarToOrderReq.getOrderNo());
|
||||
orderMainRepo.update(updateWrapper);
|
||||
//TODO 变更车辆状态
|
||||
|
||||
return getOrderInfoByOrderNo(bindCarToOrderReq.getOrderNo());
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderDTO requestReturnCar(ReturnCarReq returnCarReq) {
|
||||
LambdaUpdateWrapper<OrderMainPO> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.set(OrderMainPO::getOrderStatus, OrderStatusEnum.WAIT_RETURN.getCode());
|
||||
updateWrapper.set(OrderMainPO::getReqEndRentTime, LocalDateTime.now());
|
||||
updateWrapper.eq(OrderMainPO::getOrderNo, returnCarReq.getOrderNo());
|
||||
orderMainRepo.update(updateWrapper);
|
||||
return getOrderInfoByOrderNo(returnCarReq.getOrderNo());
|
||||
}
|
||||
|
||||
@Override
|
||||
public OrderDTO confirmReturnCar(ReturnCarReq returnCarReq) {
|
||||
//变更订单状态,记录还车时间
|
||||
LambdaUpdateWrapper<OrderMainPO> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.set(OrderMainPO::getOrderStatus, OrderStatusEnum.RENT_END.getCode());
|
||||
updateWrapper.set(OrderMainPO::getActEndRentTime, LocalDateTime.now());
|
||||
updateWrapper.eq(OrderMainPO::getOrderNo, returnCarReq.getOrderNo());
|
||||
orderMainRepo.update(updateWrapper);
|
||||
//TODO 变更车辆状态
|
||||
return getOrderInfoByOrderNo(returnCarReq.getOrderNo());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user