From 98ec407694095d9d61aeef0db304dcfef04511a2 Mon Sep 17 00:00:00 2001 From: zhangli <123879394@qq.com> Date: Mon, 28 Jul 2025 23:02:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=94=9F=E6=88=90=E5=AD=90?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/common/enums/SubOrderTypeEnum.java | 1 + .../order/service/impl/OrderServiceImpl.java | 29 ++++-- .../thirdpart/dto/RentBatteyRuleDTO.java | 91 +++++++++++++++++++ .../order/thirdpart/facade/CarFacade.java | 5 +- .../order/thirdpart/integration/CarInteg.java | 18 +++- .../java/com/sczx/order/utils/OrderUtil.java | 14 ++- 6 files changed, 144 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/sczx/order/thirdpart/dto/RentBatteyRuleDTO.java diff --git a/src/main/java/com/sczx/order/common/enums/SubOrderTypeEnum.java b/src/main/java/com/sczx/order/common/enums/SubOrderTypeEnum.java index 2c3cff9..559e643 100644 --- a/src/main/java/com/sczx/order/common/enums/SubOrderTypeEnum.java +++ b/src/main/java/com/sczx/order/common/enums/SubOrderTypeEnum.java @@ -13,6 +13,7 @@ import lombok.Getter; public enum SubOrderTypeEnum { DEPOSIT("DEPOSIT", "押金订单"), RENTCAR("RENTCAR", "租车订单"), + RENTBATTEY("RENTBATTEY", "租电订单"), ; private final String code; diff --git a/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java b/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java index e4de1da..5e315fc 100644 --- a/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java +++ b/src/main/java/com/sczx/order/service/impl/OrderServiceImpl.java @@ -16,10 +16,7 @@ import com.sczx.order.po.OrderSubPO; import com.sczx.order.repository.OrderMainRepo; import com.sczx.order.repository.OrderSubRepo; import com.sczx.order.service.OrderService; -import com.sczx.order.thirdpart.dto.CarModelSimpleDTO; -import com.sczx.order.thirdpart.dto.CompanyStoreDTO; -import com.sczx.order.thirdpart.dto.RentCarRuleDTO; -import com.sczx.order.thirdpart.dto.UnifiedPaymentInfoDTO; +import com.sczx.order.thirdpart.dto.*; import com.sczx.order.thirdpart.integration.CarInteg; import com.sczx.order.thirdpart.integration.StoreInteg; import com.sczx.order.utils.JwtUtil; @@ -71,6 +68,11 @@ public class OrderServiceImpl implements OrderService { RentCarRuleDTO rentCarRuleDTO = carInteg.getRentCarRuleByCarRuleId(rentCarOrderReq.getRentCarRuleId()); + RentBatteyRuleDTO rentBatteyRuleDTO = null; + if(rentCarOrderReq.getRentBatteyRuleId()!=null){ + rentBatteyRuleDTO = carInteg.getRentBatteyRuleByBatteyRuleId(rentCarOrderReq.getRentBatteyRuleId()); + } + //生成订单主表 OrderMainPO orderMainPO = OrderConvert.INSTANCE.subOrderToPo(rentCarOrderReq, userInfoDTO, rentCarRuleDTO); orderMainPO.setOrderNo(OrderUtil.generateOrderNo()); @@ -95,11 +97,11 @@ public class OrderServiceImpl implements OrderService { } } List orderSubPOList = new ArrayList<>(); - String subOrderNo = OrderUtil.generateSubOrderNo(); + //如果未开通免押则要生成押金订单 if(!rentCarOrderReq.getIsDepositFree()){ OrderSubPO depositOrder = new OrderSubPO(); - depositOrder.setSuborderNo(subOrderNo); + depositOrder.setSuborderNo(OrderUtil.generateSubOrderNo(OrderUtil.YJ_PREFIX)); depositOrder.setOrderId(orderMainPO.getOrderId()); depositOrder.setSuborderType(SubOrderTypeEnum.DEPOSIT.getCode()); depositOrder.setAmount(orderMainPO.getDepositPrice()); @@ -107,8 +109,21 @@ public class OrderServiceImpl implements OrderService { depositOrder.setPaymentMethod(paymentType); orderSubPOList.add(depositOrder); } + //如果选择了租电套餐,则还需要生成租电子订单 + if(rentBatteyRuleDTO!=null){ + rentBatteyRuleDTO = carInteg.getRentBatteyRuleByBatteyRuleId(rentCarOrderReq.getRentBatteyRuleId()); + OrderSubPO depositOrder = new OrderSubPO(); + depositOrder.setSuborderNo(OrderUtil.generateSubOrderNo(OrderUtil.ZD_PREFIX)); + depositOrder.setOrderId(orderMainPO.getOrderId()); + depositOrder.setSuborderType(SubOrderTypeEnum.RENTBATTEY.getCode()); + depositOrder.setAmount(rentBatteyRuleDTO.getRentPrice()); + depositOrder.setCreatedAt(LocalDateTime.now()); + depositOrder.setPaymentMethod(paymentType); + orderSubPOList.add(depositOrder); + } + //生成租车订单 OrderSubPO rentOrder = new OrderSubPO(); - rentOrder.setSuborderNo(subOrderNo); + rentOrder.setSuborderNo(OrderUtil.generateSubOrderNo(OrderUtil.ZC_PREFIX)); rentOrder.setOrderId(orderMainPO.getOrderId()); rentOrder.setSuborderType(SubOrderTypeEnum.RENTCAR.getCode()); rentOrder.setAmount(orderMainPO.getRentalPrice()); diff --git a/src/main/java/com/sczx/order/thirdpart/dto/RentBatteyRuleDTO.java b/src/main/java/com/sczx/order/thirdpart/dto/RentBatteyRuleDTO.java new file mode 100644 index 0000000..c9e3787 --- /dev/null +++ b/src/main/java/com/sczx/order/thirdpart/dto/RentBatteyRuleDTO.java @@ -0,0 +1,91 @@ +package com.sczx.order.thirdpart.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@ApiModel(value = "租电套餐计费规则") +@Data +public class RentBatteyRuleDTO { + + @ApiModelProperty("租电套餐id") + private Integer id; + + @ApiModelProperty("商品标题") + private String title; + + @ApiModelProperty("商品描述") + private String detail; + + @ApiModelProperty("图标") + private String icon; + + @ApiModelProperty("电压") + private String voltage; + + @ApiModelProperty("电容") + private String ah; + + @ApiModelProperty("最大里程") + private Integer maxMileage; + + @ApiModelProperty("最小里程 默认0") + private Integer minMileage; + + @ApiModelProperty("押金 ") + private BigDecimal depositPrice; + + @ApiModelProperty("租金") + private BigDecimal rentPrice; + + @ApiModelProperty("计时方式") + private Integer durationType; + + @ApiModelProperty("租赁时长") + private Integer duration; + + @ApiModelProperty("盗抢险") + private BigDecimal insurancePrice; + + @ApiModelProperty("是否强制投保 默认0 false") + private Boolean compulsoryInsurance; + + @ApiModelProperty("保险有效时长 默认12个月") + private Integer insuranceDuration; + + @ApiModelProperty("换电次数") + private Integer changeNum; + + @ApiModelProperty("1、有限次数 2无限次数") + private Integer changeType; + + private Boolean isDelete; + + private Integer cityId; + + private Integer operatorId; + + private Integer provinceId; + + @ApiModelProperty("电池类型") + private Integer categoryId; + + @ApiModelProperty("电池类型名称") + private String categoryName; + + @ApiModelProperty("套餐类型 换电/租电") + private Integer mealType; + + @ApiModelProperty("套餐排序规则") + private Integer mealSort; + + private Boolean isJoinInvite; + + @ApiModelProperty("套餐渠道租车默认 id号待定") + private Integer mealChannel; + + @ApiModelProperty("购买限制类型") + private Integer buyLimitType; +} diff --git a/src/main/java/com/sczx/order/thirdpart/facade/CarFacade.java b/src/main/java/com/sczx/order/thirdpart/facade/CarFacade.java index 2be0071..dfa53e5 100644 --- a/src/main/java/com/sczx/order/thirdpart/facade/CarFacade.java +++ b/src/main/java/com/sczx/order/thirdpart/facade/CarFacade.java @@ -2,7 +2,7 @@ package com.sczx.order.thirdpart.facade; import com.sczx.order.common.Result; import com.sczx.order.thirdpart.dto.CarModelSimpleDTO; -import com.sczx.order.thirdpart.dto.CompanyStoreDTO; +import com.sczx.order.thirdpart.dto.RentBatteyRuleDTO; import com.sczx.order.thirdpart.dto.RentCarRuleDTO; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; @@ -17,4 +17,7 @@ public interface CarFacade { @GetMapping("/carRule/getRentCarRuleByCarRuleId") Result getRentCarRuleByCarRuleId(@RequestParam(name = "carRuleId") Long carRuleId); + + @GetMapping("/batteyRule/getRentBatteyRuleByBatteyRuleId") + Result getRentBatteyRuleByBatteyRuleId(@RequestParam(name = "batteyRuleId") Long batteyRuleId); } \ No newline at end of file diff --git a/src/main/java/com/sczx/order/thirdpart/integration/CarInteg.java b/src/main/java/com/sczx/order/thirdpart/integration/CarInteg.java index 6a3b6ab..913273d 100644 --- a/src/main/java/com/sczx/order/thirdpart/integration/CarInteg.java +++ b/src/main/java/com/sczx/order/thirdpart/integration/CarInteg.java @@ -3,15 +3,12 @@ package com.sczx.order.thirdpart.integration; import com.sczx.order.common.Result; import com.sczx.order.exception.InnerException; import com.sczx.order.thirdpart.dto.CarModelSimpleDTO; -import com.sczx.order.thirdpart.dto.CompanyStoreDTO; +import com.sczx.order.thirdpart.dto.RentBatteyRuleDTO; import com.sczx.order.thirdpart.dto.RentCarRuleDTO; import com.sczx.order.thirdpart.facade.CarFacade; -import com.sczx.order.thirdpart.facade.StoreFacade; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; @Slf4j @Component @@ -47,4 +44,17 @@ public class CarInteg { return null; } + public RentBatteyRuleDTO getRentBatteyRuleByBatteyRuleId(Long batteyRuleId){ + try{ + Result result = carFacade.getRentBatteyRuleByBatteyRuleId(batteyRuleId); + if(result.isSuccess()){ + return result.getData(); + } + } catch (Exception e){ + log.error("根据租电套餐id获取套餐信息失败",e); + throw new InnerException("根据租电套餐id获取套餐信息失败"); + } + return null; + } + } diff --git a/src/main/java/com/sczx/order/utils/OrderUtil.java b/src/main/java/com/sczx/order/utils/OrderUtil.java index 70ff603..461f73b 100644 --- a/src/main/java/com/sczx/order/utils/OrderUtil.java +++ b/src/main/java/com/sczx/order/utils/OrderUtil.java @@ -6,6 +6,16 @@ import java.util.UUID; public class OrderUtil { + public static final String ORDER_PREFIX = "OC"; + + public static final String YJ_PREFIX = "YJ"; + + public static final String ZD_PREFIX = "ZD"; + + public static final String ZC_PREFIX = "ZC"; + + public static final String YQ_PREFIX = "YQ"; + /** * 生成订单号的方法 * @return 唯一订单号字符串 @@ -21,10 +31,10 @@ public class OrderUtil { * 生成子订单号用于支付 * @return 唯一订单号字符串 */ - public static String generateSubOrderNo() { + public static String generateSubOrderNo(String prefix) { // 使用时间戳+UUID后缀确保唯一性 String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); String uuidSuffix = UUID.randomUUID().toString().replace("-", "").substring(0, 6).toUpperCase(); - return "SUB" + timestamp + uuidSuffix; // sub代表子订单号 + return prefix + timestamp + uuidSuffix; // sub代表子订单号 } }