From f4c9281d1b7f19fef0d8ee7cb03e166a218b33f2 Mon Sep 17 00:00:00 2001 From: zhibing.pu <393733352@qq.com> Date: 星期四, 05 九月 2024 17:50:33 +0800 Subject: [PATCH] 完善功能 --- ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingRecordFallbackFactory.java | 48 ++ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 25 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/CloudParkingSpace.java | 35 + ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 3 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingRecordClient.java | 54 ++ ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserCarFallbackFactory.java | 5 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java | 24 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/CouponController.java | 50 ++ ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/OfflineParkingOrder.java | 91 ++++ ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java | 134 ++++++ ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/CloudParkingOrder.java | 84 ++++ ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/Parameter.java | 47 ++ ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/UsedCoupon.java | 47 ++ ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java | 10 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java | 14 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java | 10 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java | 5 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java | 13 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserCarClient.java | 9 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserCarController.java | 18 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/OfflineParkingSpace.java | 39 + ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/GetChargingOrderByLicensePlate.java | 24 + ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/GetCouponResp.java | 43 ++ ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java | 50 ++ ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java | 6 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/BaseResponse.java | 31 + ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/GetParkingRecord.java | 19 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/ParkingOrderController.java | 93 ++++ ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/CouponService.java | 120 ++++++ ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java | 10 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/GetCouponReq.java | 31 + 31 files changed, 1,177 insertions(+), 15 deletions(-) diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserCarFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserCarFallbackFactory.java index 7c406e4..2a15a88 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserCarFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserCarFallbackFactory.java @@ -31,6 +31,11 @@ public R<List<TAppUserCar>> getCarByIds(List<Long> carIds) { return R.fail("根据用户车辆id查询车辆信息失败:"+throwable.getMessage()); } + + @Override + public R<TAppUserCar> getAppUserCarByLicensePlate(String licensePlate) { + return R.fail("根据车牌号查询数据失败:" + throwable.getMessage()); + } }; } } diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserCarClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserCarClient.java index 27f3229..80a88a5 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserCarClient.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserCarClient.java @@ -28,4 +28,13 @@ */ @PostMapping(value = "/t-app-user-car/getCarByIds") public R<List<TAppUserCar>> getCarByIds(@RequestBody List<Long> carIds); + + + /** + * 根据车牌号查询数据 + * @param licensePlate + * @return + */ + @PostMapping(value = "/t-app-user-car/getAppUserCarByLicensePlate") + R<TAppUserCar> getAppUserCarByLicensePlate(@RequestParam("licensePlate") String licensePlate); } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java index d66b799..74e56bf 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingLotFallbackFactory.java @@ -44,6 +44,11 @@ public R<BigDecimal> getRecordAmount(LocalDate sixBefore) { return null; } + + @Override + public R<TParkingLot> getParkingLotByAppKey(String appKey) { + return R.fail("根据停车场标识查询失败:" + throwable.getMessage()); + } }; } } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingRecordFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingRecordFallbackFactory.java new file mode 100644 index 0000000..0bd9750 --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ParkingRecordFallbackFactory.java @@ -0,0 +1,48 @@ +package com.ruoyi.chargingPile.api.factory; + +import com.ruoyi.chargingPile.api.feignClient.ParkingRecordClient; +import com.ruoyi.chargingPile.api.model.TParkingRecord; +import com.ruoyi.chargingPile.api.vo.GetParkingRecord; +import com.ruoyi.common.core.domain.R; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + + +/** + * 停车场服务降级处理 + * + * @author ruoyi + */ +@Component +public class ParkingRecordFallbackFactory implements org.springframework.cloud.openfeign.FallbackFactory<ParkingRecordClient> +{ + private static final Logger log = LoggerFactory.getLogger(ParkingRecordFallbackFactory.class); + + @Override + public ParkingRecordClient create(Throwable throwable) { + log.error("停车记录调用失败:{}", throwable.getMessage()); + return new ParkingRecordClient() { + + + @Override + public R<TParkingRecord> getParkingRecord(GetParkingRecord query) { + return R.fail("根据车牌和状态查询停车数据失败:" + throwable.getMessage()); + } + + @Override + public void updateParkingRecord(TParkingRecord parkingRecord) { + + } + + @Override + public R<TParkingRecord> getParkingRecordById(Long id) { + return R.fail("根据id获取数失败:" + throwable.getMessage()); + } + + @Override + public void addParkingRecord(TParkingRecord parkingRecord) { + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java index bc3338a..fea8b39 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java @@ -34,5 +34,13 @@ @PostMapping(value = "/t-parking-lot/getRecordAmount") public R<BigDecimal> getRecordAmount(@RequestParam("sixBefore") LocalDate sixBefore); - + + + /** + * 根据停车场标识查询停车场 + * @param appKey + * @return + */ + @PostMapping(value = "/t-parking-lot/getParkingLotByAppKey") + R<TParkingLot> getParkingLotByAppKey(@RequestParam("appKey") String appKey); } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingRecordClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingRecordClient.java new file mode 100644 index 0000000..b86ad6d --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingRecordClient.java @@ -0,0 +1,54 @@ +package com.ruoyi.chargingPile.api.feignClient; + +import com.ruoyi.chargingPile.api.factory.ParkingRecordFallbackFactory; +import com.ruoyi.chargingPile.api.model.TParkingRecord; +import com.ruoyi.chargingPile.api.vo.GetParkingRecord; +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @author zhibing.pu + * @Date 2024/9/5 14:05 + */ +@FeignClient(contextId = "ParkingRecordClient", value = ServiceNameConstants.CHARGINGPILE_SERVICE, fallbackFactory = ParkingRecordFallbackFactory.class) +public interface ParkingRecordClient { + + + /** + * 根据车牌和状态查询停车数据 + * @param query + * @return + */ + @PostMapping("/t-parking-record/getParkingRecord") + R<TParkingRecord> getParkingRecord(@RequestBody GetParkingRecord query); + + + /** + * 修改停车数据 + * @param parkingRecord + */ + @PostMapping("/t-parking-record/updateParkingRecord") + void updateParkingRecord(@RequestBody TParkingRecord parkingRecord); + + + /** + * 根据id获取数据 + * @param id + * @return + */ + @PostMapping("/t-parking-record/getParkingRecordById") + R<TParkingRecord> getParkingRecordById(@RequestParam("id") Long id); + + + /** + * 添加数据 + * @param parkingRecord + */ + @PostMapping("/t-parking-record/addParkingRecord") + void addParkingRecord(@RequestBody TParkingRecord parkingRecord); + +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java index 889907b..cead23c 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TParkingRecord.java @@ -39,11 +39,13 @@ @ApiModelProperty(value = "车牌号") @TableField("license_plate") private String licensePlate; + @TableField(exist = false) private String name; + @TableField(exist = false) - private String uid; + @ApiModelProperty(value = "订单编号") @TableField("code") private String code; @@ -87,6 +89,26 @@ @ApiModelProperty(value = "添加时间") @TableField("create_time") private LocalDateTime createTime; + + @ApiModelProperty(value = "超时占位费") + @TableField("timeout_amount") + private BigDecimal timeoutAmount; + + @ApiModelProperty(value = "电话") + @TableField("phone") + private String phone; + + @ApiModelProperty(value = "免费时长(分钟)") + @TableField("free_duration") + private Integer freeDuration; + + @ApiModelProperty(value = "免费金额") + @TableField("free_amount") + private BigDecimal freeAmount; + + @ApiModelProperty(value = "车场流水号") + @TableField("serialnumber") + private String serialnumber; } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/GetParkingRecord.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/GetParkingRecord.java new file mode 100644 index 0000000..40259a7 --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/GetParkingRecord.java @@ -0,0 +1,19 @@ +package com.ruoyi.chargingPile.api.vo; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2024/9/5 14:16 + */ +@Data +public class GetParkingRecord { + /** + * 车牌 + */ + private String licensePlate; + /** + * 状态(1=已进场,2=已出场,3=已缴费出场) + */ + private Integer status; +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 5e160da..440d517 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -3,4 +3,5 @@ com.ruoyi.chargingPile.api.factory.ParkingLotFallbackFactory com.ruoyi.chargingPile.api.factory.ChargingGunFallbackFactory com.ruoyi.chargingPile.api.factory.AccountingStrategyDetailFallbackFactory -com.ruoyi.chargingPile.api.factory.AccountingStrategyFallbackFactory \ No newline at end of file +com.ruoyi.chargingPile.api.factory.AccountingStrategyFallbackFactory +com.ruoyi.chargingPile.api.factory.ParkingRecordFallbackFactory \ No newline at end of file diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java index d53879f..92cce5c 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java @@ -7,6 +7,7 @@ import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.query.TChargingCountQuery; import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; +import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; @@ -83,6 +84,11 @@ public void excelEndCharge(String code) { } + + @Override + public R<TChargingOrder> getChargingOrderByLicensePlate(GetChargingOrderByLicensePlate query) { + return R.fail("根据车牌号和时间查询有效的充电数据失败:" + throwable.getMessage()); + } }; } } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java index 591a275..5958408 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java @@ -8,6 +8,7 @@ import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.query.TChargingCountQuery; import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; +import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; @@ -91,4 +92,13 @@ */ @PostMapping("/t-charging-order/excelEndCharge") void excelEndCharge(@RequestParam("code") String code); + + + /** + * 根据车牌号和时间查询有效的充电数据 + * @param query + * @return + */ + @PostMapping("/t-charging-order/getChargingOrderByLicensePlate") + R<TChargingOrder> getChargingOrderByLicensePlate(@RequestBody GetChargingOrderByLicensePlate query); } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/GetChargingOrderByLicensePlate.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/GetChargingOrderByLicensePlate.java new file mode 100644 index 0000000..eeb0421 --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/vo/GetChargingOrderByLicensePlate.java @@ -0,0 +1,24 @@ +package com.ruoyi.order.api.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @author zhibing.pu + * @Date 2024/9/5 14:25 + */ +@Data +public class GetChargingOrderByLicensePlate { + /** + * 车牌 + */ + private String licensePlate; + /** + * 开始时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime startTime; + +} diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserCarController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserCarController.java index d438eb7..dda013b 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserCarController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserCarController.java @@ -1,15 +1,13 @@ package com.ruoyi.account.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.account.api.model.TAppUserCar; import com.ruoyi.account.service.TAppUserCarService; import com.ruoyi.common.core.domain.R; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -37,6 +35,18 @@ public R<List<TAppUserCar>> getCarByIds(@RequestBody List<Long> carIds){ return R.ok(appUserCarService.list(Wrappers.lambdaQuery(TAppUserCar.class).in(TAppUserCar::getId,carIds))); } + + + /** + * 根据车牌号查询数据 + * @param licensePlate + * @return + */ + @PostMapping(value = "/t-app-user-car/getAppUserCarByLicensePlate") + public R<TAppUserCar> getAppUserCarByLicensePlate(@RequestParam("licensePlate") String licensePlate){ + TAppUserCar one = appUserCarService.getOne(new LambdaQueryWrapper<TAppUserCar>().eq(TAppUserCar::getLicensePlate, licensePlate).eq(TAppUserCar::getDelFlag, 0)); + return R.ok(one); + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java index 22746d3..b00e89c 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java @@ -1,6 +1,7 @@ package com.ruoyi.chargingPile.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.chargingPile.api.dto.TParkingLotDTO; import com.ruoyi.chargingPile.api.model.TCarport; @@ -156,5 +157,18 @@ BigDecimal sum = parkingRecordService.getSum(sixBefore); return R.ok(); } + + + /** + * 根据停车场标识查询停车场 + * @param appKey + * @return + */ + @PostMapping(value = "/getParkingLotByAppKey") + public R<TParkingLot> getParkingLotByAppKey(@RequestParam("appKey") String appKey){ + TParkingLot parkingLot = parkingLotService.getOne(new LambdaQueryWrapper<TParkingLot>() + .eq(TParkingLot::getAppKey, appKey).eq(TParkingLot::getDelFlag, 0)); + return R.ok(parkingLot); + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java index 433728e..6449504 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingRecordController.java @@ -1,9 +1,11 @@ package com.ruoyi.chargingPile.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.chargingPile.api.model.TParkingLot; import com.ruoyi.chargingPile.api.model.TParkingRecord; +import com.ruoyi.chargingPile.api.vo.GetParkingRecord; import com.ruoyi.chargingPile.dto.ParkingRecordPageQuery; import com.ruoyi.chargingPile.service.TParkingLotService; import com.ruoyi.chargingPile.service.TParkingRecordService; @@ -56,8 +58,50 @@ return R.ok(); } - - - + + + /** + * 根据车牌和状态查询停车数据 + * @param query + * @return + */ + @PostMapping("/getParkingRecord") + public R<TParkingRecord> getParkingRecord(@RequestBody GetParkingRecord query){ + TParkingRecord one = parkingRecordService.getOne(new LambdaQueryWrapper<TParkingRecord>() + .eq(TParkingRecord::getLicensePlate, query.getLicensePlate()).eq(TParkingRecord::getStatus, query.getStatus())); + return R.ok(one); + } + + + /** + * 修改停车数据 + * @param parkingRecord + */ + @PostMapping("/updateParkingRecord") + public void updateParkingRecord(@RequestBody TParkingRecord parkingRecord){ + parkingRecordService.updateById(parkingRecord); + } + + + /** + * 根据id获取数据 + * @param id + * @return + */ + @PostMapping("/getParkingRecordById") + public R<TParkingRecord> getParkingRecordById(@RequestParam("id") Long id){ + TParkingRecord parkingRecord = parkingRecordService.getById(id); + return R.ok(parkingRecord); + } + + + /** + * 添加数据 + * @param parkingRecord + */ + @PostMapping("/addParkingRecord") + public void addParkingRecord(@RequestBody TParkingRecord parkingRecord){ + parkingRecordService.save(parkingRecord); + } } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/CouponController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/CouponController.java new file mode 100644 index 0000000..f98d54e --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/CouponController.java @@ -0,0 +1,50 @@ +package com.ruoyi.integration.barrierGate.controller; + +import com.ruoyi.integration.barrierGate.model.BaseResponse; +import com.ruoyi.integration.barrierGate.model.GetCouponReq; +import com.ruoyi.integration.barrierGate.model.GetCouponResp; +import com.ruoyi.integration.barrierGate.model.UsedCoupon; +import com.ruoyi.integration.barrierGate.server.CouponService; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * 优惠券控制器 + * @author zhibing.pu + * @Date 2024/9/5 11:10 + */ +@RestController +@RequestMapping("/coupon") +public class CouponController { + + @Resource + private CouponService couponService; + + + /** + * 获取优惠券 + * 减免停车费的优惠 + * @param req + * @return + */ + @ResponseBody + @PostMapping("/getCoupon") + public BaseResponse<GetCouponResp> getCoupon(@RequestBody GetCouponReq req){ + GetCouponResp coupon = couponService.getCoupon(req); + return BaseResponse.ok(coupon); + } + + + /** + * 使用优惠券 + * @param req + * @return + */ + @ResponseBody + @PostMapping("/usedCoupon") + public BaseResponse usedCoupon(@RequestBody UsedCoupon req){ + couponService.usedCoupon(req); + return BaseResponse.ok(); + } +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/ParkingOrderController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/ParkingOrderController.java new file mode 100644 index 0000000..75ec902 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/controller/ParkingOrderController.java @@ -0,0 +1,93 @@ +package com.ruoyi.integration.barrierGate.controller; + +import com.ruoyi.integration.barrierGate.model.*; +import com.ruoyi.integration.barrierGate.server.ParkingOrderService; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * @author zhibing.pu + * @Date 2024/9/5 16:14 + */ +@RestController +@RequestMapping("/parkingOrder") +public class ParkingOrderController { + + @Resource + private ParkingOrderService parkingOrderService; + + + /** + * 云停车入场 + * @param order + */ + @ResponseBody + @PostMapping("/cloudParkingInOrder") + public BaseResponse cloudParkingInOrder(@RequestBody CloudParkingOrder order){ + parkingOrderService.cloudParkingInOrder(order); + return BaseResponse.ok(); + } + + + /** + * 云停车出场 + * @param order + */ + @ResponseBody + @PostMapping("/cloudParkingOutOrder") + public BaseResponse cloudParkingOutOrder(@RequestBody CloudParkingOrder order){ + parkingOrderService.cloudParkingOutOrder(order); + return BaseResponse.ok(); + } + + + /** + * 云停车实时车位 + * @param parkingSpace + */ + @ResponseBody + @PostMapping("/cloudParkingSpace") + public BaseResponse cloudParkingSpace(@RequestBody CloudParkingSpace parkingSpace){ + parkingOrderService.cloudParkingSpace(parkingSpace); + return BaseResponse.ok(); + } + + + + /** + * 线下停车场入场 + * @param order + */ + @ResponseBody + @PostMapping("/offlineParkingInOrder") + public BaseResponse offlineParkingInOrder(@RequestBody OfflineParkingOrder order){ + parkingOrderService.offlineParkingInOrder(order); + return BaseResponse.ok(); + } + + + /** + * 线下停车场出场 + * @param order + */ + @ResponseBody + @PostMapping("/offlineParkingOutOrder") + public BaseResponse offlineParkingOutOrder(@RequestBody OfflineParkingOrder order){ + parkingOrderService.offlineParkingOutOrder(order); + return BaseResponse.ok(); + } + + + /** + * 线下停车场实时车位 + * @param parkingSpace + */ + @ResponseBody + @PostMapping("/offlineParkingSpace") + public BaseResponse offlineParkingSpace(@RequestBody OfflineParkingSpace parkingSpace){ + parkingOrderService.offlineParkingSpace(parkingSpace); + return BaseResponse.ok(); + } + +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/BaseResponse.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/BaseResponse.java new file mode 100644 index 0000000..139b51a --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/BaseResponse.java @@ -0,0 +1,31 @@ +package com.ruoyi.integration.barrierGate.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2024/9/5 11:29 + */ +@Data +public class BaseResponse<T> { + + private String code; + + private String msg; + + private T data; + + + public static BaseResponse ok(){ + return ok(new Object()); + } + + + public static <T> BaseResponse<T> ok(T data){ + BaseResponse baseResponse = new BaseResponse(); + baseResponse.setCode("0"); + baseResponse.setData(data); + baseResponse.setMsg("成功"); + return baseResponse; + } +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/CloudParkingOrder.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/CloudParkingOrder.java new file mode 100644 index 0000000..af10c3d --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/CloudParkingOrder.java @@ -0,0 +1,84 @@ +package com.ruoyi.integration.barrierGate.model; + +import lombok.Data; + +/** + * 云停车订单实体 + * @author zhibing.pu + * @Date 2024/9/5 15:54 + */ +@Data +public class CloudParkingOrder { + /** + * 停车场appKey + */ + private String appkey; + /** + * 车场业务ID + */ + private String id; + /** + * 入场通道号 + */ + private String enterChannel; + /** + * 入场时间 + */ + private String enterDateTime; + /** + * 车牌号 + */ + private String plate; + /** + * 入场通道名称 + */ + private String enterChannelName; + /** + * 车牌颜色 + */ + private String plateColor; + /** + * 卡种类 + */ + private String kind; + /** + * 姓名 + */ + private String name; + /** + * 应收金额 + */ + private String receivable; + /** + * 实收金额 + */ + private String payment; + /** + * 支付方式 + */ + private String payType; + /** + * 离场通道号 + */ + private String leaveChannel; + /** + * 离场时间 + */ + private String leaveDateTime; + /** + * 离场通道名称 + */ + private String leaveChannelName; + /** + * 停车时长 + */ + private String longTime; + /** + * 时间戳 + */ + private String timestamp; + /** + * 签名 + */ + private String sign; +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/CloudParkingSpace.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/CloudParkingSpace.java new file mode 100644 index 0000000..743db0c --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/CloudParkingSpace.java @@ -0,0 +1,35 @@ +package com.ruoyi.integration.barrierGate.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2024/9/5 16:22 + */ +@Data +public class CloudParkingSpace { + /** + * 停车场appkey + */ + private String appkey; + /** + * 总车位数 + */ + private String total; + /** + * 已用车位 + */ + private String used; + /** + * 空余车位 + */ + private String free; + /** + * 时间戳 + */ + private String timestamp; + /** + * 签名 + */ + private String sign; +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/GetCouponReq.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/GetCouponReq.java new file mode 100644 index 0000000..964c335 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/GetCouponReq.java @@ -0,0 +1,31 @@ +package com.ruoyi.integration.barrierGate.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2024/9/5 11:12 + */ +@Data +public class GetCouponReq { + /** + * 停车场appkey + */ + private String appKey; + /** + * 车牌号 + */ + private String carNumber; + /** + * 时间戳 + */ + private String timestamp; + /** + * 停车费用 + */ + private String fee; + /** + * 签名 + */ + private String sign; +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/GetCouponResp.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/GetCouponResp.java new file mode 100644 index 0000000..58bbb7b --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/GetCouponResp.java @@ -0,0 +1,43 @@ +package com.ruoyi.integration.barrierGate.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2024/9/5 11:19 + */ +@Data +public class GetCouponResp { + /** + * 优惠券记录id + */ + private Long recordId; + /** + * 车牌号 + */ + private String carNumber; + /** + * 平台编号 + */ + private String sysOrgId; + /** + * 商户名称 + */ + private String posName; + /** + * 优惠券名称 + */ + private String couponName; + /** + * 发放人 + */ + private String lssuer; + /** + * 类型:1单次全免、2金额优惠、3单笔折扣、4优惠时长、5日期范围全免 + */ + private Integer type; + /** + * 优惠明细 + */ + private Parameter parameter; +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/OfflineParkingOrder.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/OfflineParkingOrder.java new file mode 100644 index 0000000..41e1691 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/OfflineParkingOrder.java @@ -0,0 +1,91 @@ +package com.ruoyi.integration.barrierGate.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * 云停车订单实体 + * @author zhibing.pu + * @Date 2024/9/5 15:54 + */ +@Data +public class OfflineParkingOrder { + /** + * 停车场appKey + */ + private String appkey; + /** + * 10 位时间戳 + */ + private String timestamp; + /** + * 签名 + */ + private String sign; + /** + * 进出记录 ID + */ + private String id; + /** + * 卡号 + */ + private String cardid; + /** + * 会员 ID + */ + private String memberid; + /** + * 会员类型 + */ + private String membertype; + /** + * 会员姓名 + */ + private String name; + /** + * 车牌号 + */ + private String platenumber; + /** + * 车牌颜色 + */ + private String platecolor; + /** + * 入场通道 + */ + private String enterchannel; + /** + * 入场时间 + */ + private String entertime; + /** + * 是否库中库 0、不是库中库,1、是库中库 + */ + private Integer subplace; + /** + * 抓拍图片(base64) + */ + private String image; + /** + * 备注 + */ + private String remark; + /** + * 停车时长(分钟) + */ + @JsonProperty("long") + private String longTime; + /** + * 停车费用 + */ + private String money; + /** + * 出场通道 + */ + private String leavechannel; + /** + * 出场时间 + */ + private String leavetime; +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/OfflineParkingSpace.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/OfflineParkingSpace.java new file mode 100644 index 0000000..b5a720d --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/OfflineParkingSpace.java @@ -0,0 +1,39 @@ +package com.ruoyi.integration.barrierGate.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2024/9/5 16:22 + */ +@Data +public class OfflineParkingSpace { + /** + * 停车场appkey + */ + private String appkey; + /** + * 10 位时间戳 + */ + private String timestamp; + /** + * 签名 + */ + private String sign; + /** + * 总车位数 + */ + private Integer place; + /** + * 剩余车位数 + */ + private Integer surplus; + /** + * 固定车数量 + */ + private Integer fixed; + /** + * 临时车数量 + */ + private Integer interim; +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/Parameter.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/Parameter.java new file mode 100644 index 0000000..79e7f63 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/Parameter.java @@ -0,0 +1,47 @@ +package com.ruoyi.integration.barrierGate.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2024/9/5 11:24 + */ +@Data +public class Parameter { + /** + * 使用门槛 + */ + private Boolean isHaveUseRequirement; + /** + * 金额优惠满减阈值 + */ + private Double minAmount; + /** + * 时长优惠满减阈值 + */ + private Double minRequirement; + /** + * 全免标记 + */ + private Boolean freeFlag; + /** + * 优惠折扣 + */ + private Double discount; + /** + * 优惠金额 + */ + private Double money; + /** + * 优惠时长 + */ + private Integer time; + /** + * 开始日期 yyyy-mm-dd HH:mm:ss #日期范围开始 + */ + private String startTime; + /** + * 结束日期 yyyy-mm-dd HH:mm:ss #日期范围开始 + */ + private String endTime; +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/UsedCoupon.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/UsedCoupon.java new file mode 100644 index 0000000..58584d8 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/model/UsedCoupon.java @@ -0,0 +1,47 @@ +package com.ruoyi.integration.barrierGate.model; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2024/9/5 15:39 + */ +@Data +public class UsedCoupon { + /** + * 停车场appkey + */ + private String appKey; + /** + * 车牌号 + */ + private String carNumber; + /** + * 车场流水号 + */ + private String serialnumber; + /** + * 时间戳 + */ + private String timestamp; + /** + * 未优惠停车费用 + */ + private String fee; + /** + * 优惠金额 + */ + private String actualFee; + /** + * 优惠券id + */ + private String recordId; + /** + * 平台编号 + */ + private String sysOrgId; + /** + * 签名 + */ + private String sign; +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/CouponService.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/CouponService.java new file mode 100644 index 0000000..0f3445f --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/CouponService.java @@ -0,0 +1,120 @@ +package com.ruoyi.integration.barrierGate.server; + +import com.ruoyi.chargingPile.api.feignClient.ParkingLotClient; +import com.ruoyi.chargingPile.api.feignClient.ParkingRecordClient; +import com.ruoyi.chargingPile.api.model.TParkingLot; +import com.ruoyi.chargingPile.api.model.TParkingRecord; +import com.ruoyi.chargingPile.api.vo.GetParkingRecord; +import com.ruoyi.integration.barrierGate.model.GetCouponReq; +import com.ruoyi.integration.barrierGate.model.GetCouponResp; +import com.ruoyi.integration.barrierGate.model.Parameter; +import com.ruoyi.integration.barrierGate.model.UsedCoupon; +import com.ruoyi.order.api.feignClient.ChargingOrderClient; +import com.ruoyi.order.api.model.TChargingOrder; +import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate; +import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.RequestBody; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author zhibing.pu + * @Date 2024/9/5 11:11 + */ +@Service +public class CouponService { + + @Resource + private ParkingLotClient parkingLotClient; + + @Resource + private ParkingRecordClient parkingRecordClient; + + @Resource + private ChargingOrderClient chargingOrderClient; + + + + + + /** + * 获取优惠券 + * @param req + * @return + */ + public GetCouponResp getCoupon(GetCouponReq req){ + //根据车牌查询入场时间,后再根据入场时间和车牌查询是否有充电订单 + String carNumber = req.getCarNumber(); + String appKey = req.getAppKey(); + TParkingLot parkingLot = parkingLotClient.getParkingLotByAppKey(appKey).getData(); + if(null == parkingLot){ + return null; + } + GetParkingRecord query = new GetParkingRecord(); + query.setStatus(1); + query.setLicensePlate(carNumber); + TParkingRecord data = parkingRecordClient.getParkingRecord(query).getData(); + if(null == data){ + return null; + } + //入场时间 + LocalDateTime inParkingTime = data.getInParkingTime(); + //开始查询充电订单 + GetChargingOrderByLicensePlate getChargingOrderByLicensePlate = new GetChargingOrderByLicensePlate(); + getChargingOrderByLicensePlate.setLicensePlate(carNumber); + getChargingOrderByLicensePlate.setStartTime(inParkingTime); + TChargingOrder tChargingOrder = chargingOrderClient.getChargingOrderByLicensePlate(getChargingOrderByLicensePlate).getData(); + + GetCouponResp resp = new GetCouponResp(); + resp.setRecordId(data.getId()); + resp.setCarNumber(carNumber); + // todo 需要第三方提供数据 + resp.setSysOrgId(""); + resp.setPosName(""); + resp.setLssuer("admin"); + resp.setType(4); + Parameter parameter = new Parameter(); + parameter.setFreeFlag(false); + if(null == tChargingOrder){ + //按照非充电进行优惠计算 + resp.setCouponName("普通停车时长优惠"); + parameter.setTime(parkingLot.getNonChargeFreeDuration()); + data.setFreeDuration(parkingLot.getNonChargeFreeDuration()); + parkingRecordClient.updateParkingRecord(data); + }else{ + resp.setCouponName("充电停车时长优惠"); + parameter.setTime(parkingLot.getChargeFreeDuration()); + data.setFreeDuration(parkingLot.getNonChargeFreeDuration()); + data.setChargingOrderId(tChargingOrder.getId()); + data.setAppUserId(tChargingOrder.getAppUserId()); + parkingRecordClient.updateParkingRecord(data); + } + resp.setParameter(parameter); + return resp; + } + + + /** + * 使用优惠券 + * @param req + */ + public void usedCoupon(UsedCoupon req){ + TParkingRecord data = parkingRecordClient.getParkingRecordById(Long.valueOf(req.getRecordId())).getData(); + data.setSerialnumber(req.getSerialnumber()); + data.setFreeAmount(new BigDecimal(req.getActualFee())); + data.setOrderAmount(new BigDecimal(req.getFee())); + BigDecimal subtract = data.getOrderAmount().subtract(data.getFreeAmount()); + if(BigDecimal.ZERO.compareTo(subtract) < 0){ + data.setTimeoutAmount(subtract); + data.setOutParkingType(1); + data.setStatus(3); + }else{ + data.setTimeoutAmount(BigDecimal.ZERO); + data.setOutParkingType(2); + data.setStatus(2); + } + parkingRecordClient.updateParkingRecord(data); + } +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java new file mode 100644 index 0000000..bb2f544 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java @@ -0,0 +1,134 @@ +package com.ruoyi.integration.barrierGate.server; + +import com.ruoyi.account.api.feignClient.AppUserCarClient; +import com.ruoyi.chargingPile.api.feignClient.ParkingLotClient; +import com.ruoyi.chargingPile.api.feignClient.ParkingRecordClient; +import com.ruoyi.chargingPile.api.model.TParkingLot; +import com.ruoyi.chargingPile.api.model.TParkingRecord; +import com.ruoyi.chargingPile.api.vo.GetParkingRecord; +import com.ruoyi.integration.barrierGate.model.CloudParkingOrder; +import com.ruoyi.integration.barrierGate.model.CloudParkingSpace; +import com.ruoyi.integration.barrierGate.model.OfflineParkingOrder; +import com.ruoyi.integration.barrierGate.model.OfflineParkingSpace; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Date; + +/** + * @author zhibing.pu + * @Date 2024/9/5 16:15 + */ +@Service +public class ParkingOrderService { + + @Resource + private ParkingRecordClient parkingRecordClient; + + @Resource + private AppUserCarClient appUserCarClient; + + @Resource + private ParkingLotClient parkingLotClient; + + + + + + /** + * 云停车入场记录 + * @param order + */ + public void cloudParkingInOrder(CloudParkingOrder order) { + TParkingRecord parkingRecord = new TParkingRecord(); + parkingRecord.setLicensePlate(order.getPlate()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + String code = "TC" + Math.random() * 1000 + sdf.format(new Date()); + parkingRecord.setCode(code); + parkingRecord.setVehicleColor(order.getPlateColor()); + TParkingLot data = parkingLotClient.getParkingLotByAppKey(order.getAppkey()).getData(); + parkingRecord.setParkingLotId(data.getId()); + parkingRecord.setInParkingTime(LocalDateTime.parse(order.getEnterDateTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + parkingRecord.setStatus(1); + parkingRecord.setCreateTime(LocalDateTime.now()); + parkingRecord.setSerialnumber(order.getId()); + parkingRecordClient.addParkingRecord(parkingRecord); + } + + + /** + * 云停车出场记录 + * @param order + */ + public void cloudParkingOutOrder(CloudParkingOrder order) { + GetParkingRecord query = new GetParkingRecord(); + query.setLicensePlate(order.getPlate()); + query.setStatus(1); + TParkingRecord parkingRecord = parkingRecordClient.getParkingRecord(query).getData(); + parkingRecord.setOutParkingTime(LocalDateTime.parse(order.getLeaveDateTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + parkingRecord.setParkingDuration(Integer.valueOf(order.getLongTime())); + parkingRecord.setOrderAmount(new BigDecimal(order.getReceivable())); + BigDecimal payment = new BigDecimal(order.getPayment()); + parkingRecord.setStatus(BigDecimal.ZERO.compareTo(payment) == 0 ? 2 : 3); + parkingRecordClient.updateParkingRecord(parkingRecord); + } + + + /** + * 云停车实时车位 + * @param parkingSpace + */ + public void cloudParkingSpace(CloudParkingSpace parkingSpace){ + + } + + + /** + * 线下停车场入场记录 + * @param order + */ + public void offlineParkingInOrder(OfflineParkingOrder order) { + TParkingRecord parkingRecord = new TParkingRecord(); + parkingRecord.setLicensePlate(order.getPlatenumber()); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + String code = "TC" + Math.random() * 1000 + sdf.format(new Date()); + parkingRecord.setCode(code); + parkingRecord.setVehicleColor(order.getPlatecolor()); + TParkingLot data = parkingLotClient.getParkingLotByAppKey(order.getAppkey()).getData(); + parkingRecord.setParkingLotId(data.getId()); + parkingRecord.setInParkingTime(LocalDateTime.parse(order.getEntertime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + parkingRecord.setStatus(1); + parkingRecord.setCreateTime(LocalDateTime.now()); + parkingRecord.setSerialnumber(order.getId()); + parkingRecordClient.addParkingRecord(parkingRecord); + } + + + /** + * 线下停车场出场记录 + * @param order + */ + public void offlineParkingOutOrder(OfflineParkingOrder order) { + GetParkingRecord query = new GetParkingRecord(); + query.setLicensePlate(order.getPlatenumber()); + query.setStatus(1); + TParkingRecord parkingRecord = parkingRecordClient.getParkingRecord(query).getData(); + parkingRecord.setOutParkingTime(LocalDateTime.parse(order.getLeavetime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + parkingRecord.setParkingDuration(Integer.valueOf(order.getLongTime())); + parkingRecord.setOrderAmount(new BigDecimal(order.getMoney())); + parkingRecordClient.updateParkingRecord(parkingRecord); + } + + + /** + * 线下停车场实时车位 + * @param parkingSpace + */ + public void offlineParkingSpace(OfflineParkingSpace parkingSpace){ + + } +} diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java index edce507..285fcf8 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java @@ -42,6 +42,7 @@ import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import com.ruoyi.order.api.vo.ChargingOrderInfoVO; import com.ruoyi.order.api.vo.ChargingOrderVO; +import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate; import com.ruoyi.order.api.vo.TCharingOrderVO; import com.ruoyi.order.dto.GetMyChargingOrderList; import com.ruoyi.order.dto.GetNoInvoicedOrder; @@ -803,4 +804,16 @@ public void excelEndCharge(@RequestParam("code") String code){ chargingOrderService.excelEndCharge(code); } + + + /** + * 根据车牌号和时间查询有效的充电数据 + * @param query + * @return + */ + @PostMapping("/getChargingOrderByLicensePlate") + public R<TChargingOrder> getChargingOrderByLicensePlate(@RequestBody GetChargingOrderByLicensePlate query){ + TChargingOrder chargingOrder = chargingOrderService.getChargingOrderByLicensePlate(query); + return R.ok(chargingOrder); + } } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java index 78d11b6..980c6e3 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java @@ -13,6 +13,7 @@ import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; import com.ruoyi.order.api.vo.ChargingOrderTimeVO; import com.ruoyi.order.api.vo.ChargingOrderVO; +import com.ruoyi.order.api.vo.GetChargingOrderByLicensePlate; import com.ruoyi.order.api.vo.TCharingOrderVO; import com.ruoyi.order.dto.*; import com.ruoyi.order.vo.ChargingOrderListInfoVO; @@ -155,4 +156,13 @@ * @param orderCode */ void excelEndCharge(String orderCode); + + + /** + * 根据车牌号和开始时间查询充电数据 + * @param query + * @return + */ + TChargingOrder getChargingOrderByLicensePlate(GetChargingOrderByLicensePlate query); + } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java index d41c20d..b99ebf0 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java @@ -37,10 +37,7 @@ import com.ruoyi.order.api.model.*; import com.ruoyi.order.api.query.ChargingOrderQuery; import com.ruoyi.order.api.query.UploadRealTimeMonitoringDataQuery; -import com.ruoyi.order.api.vo.ChargingOrderListVO; -import com.ruoyi.order.api.vo.ChargingOrderTimeVO; -import com.ruoyi.order.api.vo.ChargingOrderVO; -import com.ruoyi.order.api.vo.TCharingOrderVO; +import com.ruoyi.order.api.vo.*; import com.ruoyi.order.dto.*; import com.ruoyi.order.mapper.TChargingOrderMapper; import com.ruoyi.order.service.*; @@ -592,7 +589,7 @@ preChargeCheck1.setFailureCause(failure_cause); //启动失败后取消订单,退款操作 refund(code); - order.setStatus(5); + order.setStatus(-1); order.setEndMode(0); }else{ preChargeCheck1.setStartupSuccess(2); @@ -1549,4 +1546,22 @@ public void excelEndCharge(String orderCode) { endCharge(orderCode, 0); } + + + /** + * 根据车牌号和开始时间查询充电数据 + * @param query + * @return + */ + @Override + public TChargingOrder getChargingOrderByLicensePlate(GetChargingOrderByLicensePlate query) { + TAppUserCar appUserCar = appUserCarClient.getAppUserCarByLicensePlate(query.getLicensePlate()).getData(); + if(null == appUserCar){ + return null; + } + TChargingOrder one = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getAppUserCarId, appUserCar.getId()) + .eq(TChargingOrder::getDelFlag, 0).gt(TChargingOrder::getStartTime, query.getStartTime()) + .eq(TChargingOrder::getRechargePaymentStatus, 2).ne(TChargingOrder::getStatus, -1)); + return one; + } } -- Gitblit v1.7.1