From 7c6b109dab3524a1f3858d931308fab716609ba0d45fb1aaaef8c1f69b1fdffa Mon Sep 17 00:00:00 2001 From: attiya <2413103649@qq.com> Date: Tue, 11 Nov 2025 09:58:43 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=8E=B7=E5=8F=96=E8=BD=A6?= =?UTF-8?q?=E8=BE=86=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feign/clients/OperationsFeignClient.java | 9 ++ .../model/dto/FeignEbikeUserBikeInfo.java | 98 ++++++++++++++++ .../model/dto/EbikeUserBikeInfo.java | 63 +++++++++- .../impl/EbikeBikeInfoServiceImpl.java | 110 ++++++++++++++++++ 4 files changed, 275 insertions(+), 5 deletions(-) create mode 100644 ebike-feign/src/main/java/com/ebike/feign/model/dto/FeignEbikeUserBikeInfo.java diff --git a/ebike-feign/src/main/java/com/ebike/feign/clients/OperationsFeignClient.java b/ebike-feign/src/main/java/com/ebike/feign/clients/OperationsFeignClient.java index 765c3cc..904ddd5 100644 --- a/ebike-feign/src/main/java/com/ebike/feign/clients/OperationsFeignClient.java +++ b/ebike-feign/src/main/java/com/ebike/feign/clients/OperationsFeignClient.java @@ -4,6 +4,7 @@ import com.cdzy.common.model.response.JsonResult; import com.ebike.feign.component.FeignTokenInterceptor; import com.ebike.feign.config.ExampleFeignConfiguration; import com.ebike.feign.model.dto.FeignEbikeDto; +import com.ebike.feign.model.dto.FeignEbikeUserBikeInfo; import com.ebike.feign.model.vo.FeignEbikeBikeRadiusVo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.validation.annotation.Validated; @@ -36,4 +37,12 @@ public interface OperationsFeignClient { @PostMapping("/ebikeBikeInfo/api/openLock") JsonResult openLock(@RequestParam("bikeCode")String bikeCode); + /** + * 用户获取车辆详情及其计费规则 + * + * @return 结果 + */ + @PostMapping("/ebikeBikeInfo/api/bikeInfo") + JsonResult bikeInfo(@RequestParam("bikeCode")String bikeCode); + } diff --git a/ebike-feign/src/main/java/com/ebike/feign/model/dto/FeignEbikeUserBikeInfo.java b/ebike-feign/src/main/java/com/ebike/feign/model/dto/FeignEbikeUserBikeInfo.java new file mode 100644 index 0000000..9363624 --- /dev/null +++ b/ebike-feign/src/main/java/com/ebike/feign/model/dto/FeignEbikeUserBikeInfo.java @@ -0,0 +1,98 @@ +package com.ebike.feign.model.dto; + +import com.mybatisflex.annotation.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 实体类。 + * + * @author attiya + * @since 2025-10-21 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table("ebike_bike_info") +public class FeignEbikeUserBikeInfo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + + /** + * 运营商ID + */ + private Long operatorId; + + /** + * 运营区ID + */ + private Long regionId; + + /** + * 车辆编号(与车辆二维码编号相同 + */ + private String bikeCode; + + /** + * 免费时长(分钟):使用服务前的免费时间 + */ + private Integer freeDurationMinutes; + + /** + * 起步时长(分钟 + */ + private Integer baseDurationMinutes; + + + /** + * 起步费用(元) + */ + private BigDecimal baseFee; + + + /** + * 时长(分钟) + */ + private Integer chargeDurationMinutes; + + /** + * 时长费用(元) + */ + private BigDecimal durationFee; + + /** + * 运营区域外调度费(元) + */ + private BigDecimal outOfServiceAreaFee; + + /** + * 停车区外调度费(元) + */ + private BigDecimal outOfParkingAreaFee; + + /** + * 封顶金额(元) + */ + private BigDecimal maxFeeAmount; + + /** + * 禁停区调度费(元) + */ + private BigDecimal noParkingZoneFee; + + /** + * 头盔管理费(元) + */ + private BigDecimal helmetManagementFee; + + +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeUserBikeInfo.java b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeUserBikeInfo.java index a71d7cb..baf10ea 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeUserBikeInfo.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeUserBikeInfo.java @@ -8,6 +8,7 @@ import lombok.NoArgsConstructor; import java.io.Serial; import java.io.Serializable; +import java.math.BigDecimal; /** * 实体类。 @@ -36,15 +37,67 @@ public class EbikeUserBikeInfo implements Serializable { */ private Long regionId; - /** - * 运营区名称 - */ - private String regionName; - /** * 车辆编号(与车辆二维码编号相同 */ private String bikeCode; + /** + * 车辆电量 + */ + private Float soc = 50F; + + /** + * 免费时长(分钟):使用服务前的免费时间 + */ + private Integer freeDurationMinutes; + + /** + * 起步时长(分钟 + */ + private Integer baseDurationMinutes; + + + /** + * 起步费用(元) + */ + private BigDecimal baseFee; + + + /** + * 时长(分钟) + */ + private Integer chargeDurationMinutes; + + /** + * 时长费用(元) + */ + private BigDecimal durationFee; + + /** + * 运营区域外调度费(元) + */ + private BigDecimal outOfServiceAreaFee; + + /** + * 停车区外调度费(元) + */ + private BigDecimal outOfParkingAreaFee; + + /** + * 封顶金额(元) + */ + private BigDecimal maxFeeAmount; + + /** + * 禁停区调度费(元) + */ + private BigDecimal noParkingZoneFee; + + /** + * 头盔管理费(元) + */ + private BigDecimal helmetManagementFee; + } diff --git a/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeInfoServiceImpl.java b/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeInfoServiceImpl.java index 5d6f394..ef271e4 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeInfoServiceImpl.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeInfoServiceImpl.java @@ -24,6 +24,9 @@ import org.postgresql.geometric.PGpolygon; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.LocalTime; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -31,8 +34,12 @@ import java.util.Objects; import static com.cdzy.operations.model.entity.table.EbikeBatteryInfoTableDef.EBIKE_BATTERY_INFO; import static com.cdzy.operations.model.entity.table.EbikeBikeInfoTableDef.EBIKE_BIKE_INFO; import static com.cdzy.operations.model.entity.table.EbikeBikeQrTableDef.EBIKE_BIKE_QR; +import static com.cdzy.operations.model.entity.table.EbikeDefaultBillingConfigurationTableDef.EBIKE_DEFAULT_BILLING_CONFIGURATION; import static com.cdzy.operations.model.entity.table.EbikeEcuInfoTableDef.EBIKE_ECU_INFO; import static com.cdzy.operations.model.entity.table.EbikeRegionTableDef.EBIKE_REGION; +import static com.cdzy.operations.model.entity.table.EbikeSpecialBillingConfigurationTableDef.EBIKE_SPECIAL_BILLING_CONFIGURATION; +import static com.cdzy.operations.model.entity.table.EbikeSpecialDayTableDef.EBIKE_SPECIAL_DAY; +import static com.cdzy.operations.model.entity.table.EbikeSpecialTimeTableDef.EBIKE_SPECIAL_TIME; /** * 服务层实现。 @@ -55,6 +62,18 @@ public class EbikeBikeInfoServiceImpl extends ServiceImpl ebikeSpecialDays = specialDayMapper.selectListByQuery(query); + EbikeSpecialDay ebikeSpecialDay = getEbikeSpecialDay(ebikeSpecialDays); + if (ebikeSpecialDay != null) { + userBikeInfo.setBaseFee(ebikeSpecialDay.getBaseFee()); + userBikeInfo.setDurationFee(ebikeSpecialDay.getDurationFee()); + userBikeInfo.setBaseDurationMinutes(ebikeSpecialDay.getBaseDurationMinutes()); + userBikeInfo.setChargeDurationMinutes(ebikeSpecialDay.getChargeDurationMinutes()); + } + + } else if (specialBillingConfiguration.getType() == SpecialBillingConfigurationType.TIME) { + query.clear(); + query.where(EBIKE_SPECIAL_TIME.REGION_ID.eq(info.getRegionId())); + List ebikeSpecialTimes = specialTimeMapper.selectListByQuery(query); + EbikeSpecialTime ebikeSpecialTime = getEbikeSpecialTime(ebikeSpecialTimes); + if (ebikeSpecialTime != null) { + userBikeInfo.setBaseFee(ebikeSpecialTime.getBaseFee()); + userBikeInfo.setDurationFee(ebikeSpecialTime.getDurationFee()); + userBikeInfo.setBaseDurationMinutes(ebikeSpecialTime.getBaseDurationMinutes()); + userBikeInfo.setChargeDurationMinutes(ebikeSpecialTime.getChargeDurationMinutes()); + } + } + return userBikeInfo; + } + } + + static EbikeSpecialDay getEbikeSpecialDay(List ebikeSpecialDays) { + LocalDate today = LocalDate.now(); + DayOfWeek dayOfWeek = today.getDayOfWeek(); + String value = String.valueOf(dayOfWeek.getValue()); + for (EbikeSpecialDay ebikeSpecialDay : ebikeSpecialDays) { + if (ebikeSpecialDay.getSpecialDayNum().equals(value)) { + return ebikeSpecialDay; + } + } return null; } + static EbikeSpecialTime getEbikeSpecialTime(List EbikeSpecialTimes) { + LocalTime time = LocalTime.now(); + for (EbikeSpecialTime ebikeSpecialTime : EbikeSpecialTimes) { + if (time.isAfter(ebikeSpecialTime.getStartTime()) && time.isBefore(ebikeSpecialTime.getEndTime())) { + return ebikeSpecialTime; + } + } + return null; + } }