From 3fa6ccaa1b2e68e1895f765e912688c971afbba9 Mon Sep 17 00:00:00 2001 From: attiya <2413103649@qq.com> Date: Sun, 27 Apr 2025 09:57:38 +0800 Subject: [PATCH] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E8=AE=A1=E8=B4=B9=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E8=AE=A1=E8=B4=B9=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cdzy/orders/enums/OrderDetailsType.java | 39 ++++++++++ .../model/entity/EbikeOrderDetails.java | 4 +- .../service/impl/UserOrdersServiceImpl.java | 72 +++++++++++++------ 3 files changed, 91 insertions(+), 24 deletions(-) create mode 100644 ebike-orders/src/main/java/com/cdzy/orders/enums/OrderDetailsType.java diff --git a/ebike-orders/src/main/java/com/cdzy/orders/enums/OrderDetailsType.java b/ebike-orders/src/main/java/com/cdzy/orders/enums/OrderDetailsType.java new file mode 100644 index 00000000..fd7f2700 --- /dev/null +++ b/ebike-orders/src/main/java/com/cdzy/orders/enums/OrderDetailsType.java @@ -0,0 +1,39 @@ +package com.cdzy.orders.enums; + +/** + * @author attiya + * @since 2025-04-25 + */ +public interface OrderDetailsType { + + /** + * 默认时长计费 + */ + int CYCLING_DURATION_FEE = 1; + + /** + * 运营区调度费用 + */ + int OPERATION_AREA_SCHEDULING_FEE = 2; + + /** + * 停车区调度费用 + */ + int PARKING_AREA_DISPATCH_FEE = 3; + + /** + * 高峰时段出行费用 + */ + int TRAVEL_EXPENSES_DURING_PEAK_HOURS = 4; + + /** + * 高峰日出行费用 + */ + int TRAVEL_EXPENSES_ON_PEAK_DAYS = 5; + + /** + * 起步费用 + */ + int STARTING_FEE = 6; + +} diff --git a/ebike-orders/src/main/java/com/cdzy/orders/model/entity/EbikeOrderDetails.java b/ebike-orders/src/main/java/com/cdzy/orders/model/entity/EbikeOrderDetails.java index 46a726e7..1ece6316 100644 --- a/ebike-orders/src/main/java/com/cdzy/orders/model/entity/EbikeOrderDetails.java +++ b/ebike-orders/src/main/java/com/cdzy/orders/model/entity/EbikeOrderDetails.java @@ -33,12 +33,12 @@ public class EbikeOrderDetails implements Serializable { * 费用项ID */ @Id - private String itemId; + private Long itemId; /** * 订单ID */ - private String orderId; + private Long orderId; /** * 费用类型:1-骑行时长费 2-运营区调度费用 3-停车区调度费用 4-高峰时段出行费用 5-高峰日出行费用 diff --git a/ebike-orders/src/main/java/com/cdzy/orders/service/impl/UserOrdersServiceImpl.java b/ebike-orders/src/main/java/com/cdzy/orders/service/impl/UserOrdersServiceImpl.java index 09f0c838..04c11dc6 100644 --- a/ebike-orders/src/main/java/com/cdzy/orders/service/impl/UserOrdersServiceImpl.java +++ b/ebike-orders/src/main/java/com/cdzy/orders/service/impl/UserOrdersServiceImpl.java @@ -5,15 +5,13 @@ import com.cdzy.common.enums.Code; import com.cdzy.common.model.JsonResult; import com.cdzy.common.model.ResGPSDto; import com.cdzy.orders.component.EbikeCoreHandler; -import com.cdzy.orders.enums.CmdCode; -import com.cdzy.orders.enums.EbikeRegionInOperation; -import com.cdzy.orders.enums.OrderStatus; -import com.cdzy.orders.enums.OrderType; +import com.cdzy.orders.enums.*; import com.cdzy.orders.mapper.UserOrdersMapper; import com.cdzy.orders.model.dto.req.ReqBikeDto; import com.cdzy.orders.model.dto.req.ReqOrderDto; import com.cdzy.orders.model.dto.res.RedisPoint; import com.cdzy.orders.model.dto.res.RspBikeDto; +import com.cdzy.orders.model.entity.EbikeOrderDetails; import com.cdzy.orders.model.entity.EbikeUserOrders; import com.cdzy.orders.service.UserOrdersService; import com.cdzy.orders.uitls.NumberUtils; @@ -34,6 +32,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -144,7 +143,7 @@ public class UserOrdersServiceImpl extends ServiceImpl operateJsonResult = operateFeignClient.getRegionFeeConfigById(bikeInfoDto.getReginId()); if (operateJsonResult.getCode() != Code.SUCCESS) { throw new RuntimeException("获取计费规则失败"); @@ -333,6 +332,7 @@ public class UserOrdersServiceImpl extends ServiceImpl list = new ArrayList<>(); //是否在运营区内 boolean pointInOperation = bikeInOperation(resGpsDto.getLongitude(), resGpsDto.getLatitude(), regionDto.getOrgId(), regionDto.getRegionId()); //是否在停车区内 @@ -347,19 +347,34 @@ public class UserOrdersServiceImpl extends ServiceImpl timeSlotCostCalculation(totalAmount, minutes, userOrders, feignEbikeSysRcostsetDto); - case WEEK -> weekCostCalculation(totalAmount, minutes, userOrders, feignEbikeSysRcostsetDto); - default -> defaultCostCalculation(totalAmount, minutes, feignEbikeSysRcostsetDto); + BigDecimal decimal = switch (timeDivisionCharging) { + case TIME_SLOT -> timeSlotCostCalculation(list,minutes, userOrders, feignEbikeSysRcostsetDto,userOrders.getOrderId()); + case WEEK -> weekCostCalculation(list,minutes, userOrders, feignEbikeSysRcostsetDto,userOrders.getOrderId()); + default -> defaultCostCalculation(list,minutes, feignEbikeSysRcostsetDto,userOrders.getOrderId()); }; + totalAmount = totalAmount.add(decimal); userOrders.setStatus(OrderStatus.PENDING_PAYMENT); userOrders.setTotalAmount(totalAmount); } @@ -367,41 +382,46 @@ public class UserOrdersServiceImpl extends ServiceImpl list, long minutes, EbikeUserOrders userOrders, ResFeignEbikeSysRcostsetDto feignEbikeSysRcostsetDto,long orderId) { + return new BigDecimal(0); } /** * 按照时间段计费 * - * @param totalAmount 当前金额(时间段计费前 * @param minutes (骑行总分钟 * @param userOrders 订单信息 * @param feignEbikeSysRcostsetDto 计费规则 * @return 计费后总金额 */ - BigDecimal weekCostCalculation(BigDecimal totalAmount, long minutes, EbikeUserOrders userOrders, ResFeignEbikeSysRcostsetDto feignEbikeSysRcostsetDto) { - return totalAmount; + BigDecimal weekCostCalculation(List list, long minutes, EbikeUserOrders userOrders, ResFeignEbikeSysRcostsetDto feignEbikeSysRcostsetDto,long orderId) { + return new BigDecimal(0); } /** * 按照时间段计费(默认 * - * @param totalAmount 当前金额(时间段计费前 * @param minutes (骑行总分钟 * @param feignEbikeSysRcostsetDto 计费规则 * @return 计费后总金额 */ - BigDecimal defaultCostCalculation(BigDecimal totalAmount, long minutes, ResFeignEbikeSysRcostsetDto feignEbikeSysRcostsetDto) { + BigDecimal defaultCostCalculation(List list, long minutes, ResFeignEbikeSysRcostsetDto feignEbikeSysRcostsetDto,long orderId) { + BigDecimal decimal = new BigDecimal(0); Integer startupDuration = feignEbikeSysRcostsetDto.getStartupDuration(); BigDecimal startupCost = feignEbikeSysRcostsetDto.getStartupCost(); - totalAmount = totalAmount.add(startupCost); + EbikeOrderDetails orderDetails = new EbikeOrderDetails(); + orderDetails.setOrderId(orderId); + orderDetails.setItemAmount(startupCost); + orderDetails.setItemType(OrderDetailsType.STARTING_FEE); + orderDetails.setItemName("起步费用"); + orderDetails.setCalculationRule(JSONObject.toJSONString(feignEbikeSysRcostsetDto)); + list.add(orderDetails); + decimal = decimal.add(startupCost); //超出起步时长计费 if (minutes > startupDuration) { BigDecimal minutesNew = BigDecimal.valueOf(minutes); @@ -417,8 +437,16 @@ public class UserOrdersServiceImpl extends ServiceImpl