|
@@ -173,6 +173,99 @@ public class CarParkChargingRulesServiceImpl extends ServiceImpl<CarParkCharging
|
|
|
}
|
|
|
|
|
|
parkingRecord.paidAmount = barnRecord.getReceivedAmount()!= null ? barnRecord.getReceivedAmount().doubleValue() : 0;;//已支付金额
|
|
|
+
|
|
|
+ if(CollectionUtil.isNotEmpty(orderList)){
|
|
|
+ ArrayList<ParkingFeeCalculator.PaymentRecord> paymentRecords = new ArrayList<>();
|
|
|
+ for (Order order : orderList) {
|
|
|
+ ParkingFeeCalculator.PaymentRecord record = new ParkingFeeCalculator.PaymentRecord();
|
|
|
+ Instant payTimeInstant = order.getPayTime().toInstant();;
|
|
|
+ record.paymentTime = payTimeInstant.atZone(ZoneId.systemDefault()).toLocalDateTime();
|
|
|
+ record.amount = order.getAmountsPayable();
|
|
|
+ paymentRecords.add(record);
|
|
|
+ }
|
|
|
+ parkingRecord.paymentRecords = paymentRecords;
|
|
|
+ }
|
|
|
+
|
|
|
+ double fee = 0;
|
|
|
+ if(CollectionUtil.isNotEmpty(list)){
|
|
|
+ CarParkStoredCard parkStoredCard = list.get(0);
|
|
|
+
|
|
|
+ parkingRecord.monthlyCardExpiryTime = parkStoredCard.getEndTime();
|
|
|
+
|
|
|
+ // 计算费用
|
|
|
+ fee = ParkingFeeCalculator.calculateParkingFee(parkingRecord, feeRule, isMonthlyCardMode);
|
|
|
+ // if(parkStoredCard.getStartTime().isAfter(inDateTime) && parkStoredCard.getEndTime().isBefore(LocalDateTime.now())){
|
|
|
+ // //入库时间在月卡开始日前,出库时间在结束日前 不会出现
|
|
|
+ // } else if(parkStoredCard.getStartTime().isAfter(inDateTime) && parkStoredCard.getEndTime().isAfter(LocalDateTime.now())){
|
|
|
+ // //入库时间在月卡开始日前,出库时间在结束日后 不会出现
|
|
|
+ // } else if (parkStoredCard.getStartTime().isBefore(inDateTime) && parkStoredCard.getEndTime().isBefore(LocalDateTime.now())) {
|
|
|
+ // //入库时间在月卡开始日后,出库时间在结束日前
|
|
|
+ // return BigDecimal.ZERO;
|
|
|
+ // } else if(parkStoredCard.getStartTime().isBefore(inDateTime) && parkStoredCard.getEndTime().isAfter(LocalDateTime.now())){
|
|
|
+ // //入库时间在月卡开始日后,出库时间在结束日后
|
|
|
+ // }
|
|
|
+ }else{
|
|
|
+ //直接计算费用
|
|
|
+ fee = ParkingFeeCalculator.calculateParkingFee(parkingRecord, feeRule, isMonthlyCardMode);
|
|
|
+ }
|
|
|
+
|
|
|
+ return new BigDecimal(fee);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据停车记录计算费用
|
|
|
+ * @param recordId
|
|
|
+ * @param userId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public BigDecimal calcuExpensesWithCoupon(Long recordId, String carNumber,Boolean isMonthlyCardMode) {
|
|
|
+ // 查询当前用户是否有月卡
|
|
|
+ List<CarParkStoredCard> list = parkStoredCardService.list(new LambdaQueryWrapper<CarParkStoredCard>().eq(CarParkStoredCard::getPlateNumber, carNumber)
|
|
|
+ .eq(CarParkStoredCard::getStatus,1).orderByDesc(CarParkStoredCard::getEndTime));
|
|
|
+ BarnRecord barnRecord = barnRecordMapper.selectById(recordId);
|
|
|
+ Assert.isTrue(barnRecord != null, "计费时停车记录不存在,id为"+recordId);
|
|
|
+
|
|
|
+ // 根据停车场id获取到计费规则
|
|
|
+ List<CarParkChargingRules> parkChargingRules = this.list(new LambdaQueryWrapper<CarParkChargingRules>().eq(CarParkChargingRules::getCarParkId, barnRecord.getCarParkId()));
|
|
|
+ Assert.isTrue(CollectionUtil.isNotEmpty(parkChargingRules), "计费规则不存在,停车场id为"+barnRecord.getCarParkId());
|
|
|
+ CarParkChargingRules carParkChargingRules = parkChargingRules.get(0);
|
|
|
+
|
|
|
+ // 获取所有订单
|
|
|
+ List<Order> orderList = orderMapper.selectList(new LambdaQueryWrapper<Order>().eq(Order::getGoodId, recordId).eq(Order::getPayStatus,1)); //查询已支付订单
|
|
|
+
|
|
|
+
|
|
|
+ // 示例计费规则
|
|
|
+ ParkingFeeCalculator.FeeRule feeRule = new ParkingFeeCalculator.FeeRule();
|
|
|
+ feeRule.freeDurationMinutes = carParkChargingRules.getFreeTime();//免费时长
|
|
|
+ feeRule.firstCycleFee = carParkChargingRules.getFirstFee() != null ? carParkChargingRules.getFirstFee().doubleValue() : 0;//首周期计费金额
|
|
|
+ feeRule.firstCycleDurationMinutes = carParkChargingRules.getFirstCycle();//首周期计费时长
|
|
|
+ feeRule.cycleDurationMinutes = carParkChargingRules.getBillingCycle();//计费周期
|
|
|
+ feeRule.cycleFee = carParkChargingRules.getFee()!= null ? carParkChargingRules.getFee().doubleValue() : 0;//每周期计费金额
|
|
|
+ feeRule.dailyCapFee = carParkChargingRules.getFeeUpperLimit()!= null ? carParkChargingRules.getFeeUpperLimit().doubleValue() : 0;//24小时封顶费用
|
|
|
+ feeRule.gracePeriodMinutes = carParkChargingRules.getOutInterval();// 离场时长宽容度(分钟)
|
|
|
+
|
|
|
+
|
|
|
+ // 将 Date 转换为 Instant
|
|
|
+ Instant instant = barnRecord.getInTime().toInstant();
|
|
|
+
|
|
|
+ // 将 Instant 转换为 LocalDateTime(假设使用系统默认时区)
|
|
|
+ LocalDateTime inDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();
|
|
|
+
|
|
|
+ // 示例停车记录
|
|
|
+ ParkingFeeCalculator.ParkingRecord parkingRecord = new ParkingFeeCalculator.ParkingRecord();
|
|
|
+ parkingRecord.entryTime = inDateTime;
|
|
|
+ parkingRecord.exitTime = LocalDateTime.now();
|
|
|
+ if(barnRecord.getOutTime()!=null){
|
|
|
+ // 将 Date 转换为 Instant
|
|
|
+ Instant outInstant = barnRecord.getInTime().toInstant();
|
|
|
+
|
|
|
+ // 将 Instant 转换为 LocalDateTime(假设使用系统默认时区)
|
|
|
+ LocalDateTime outDateTime = outInstant.atZone(ZoneId.systemDefault()).toLocalDateTime();
|
|
|
+ parkingRecord.exitTime = outDateTime;
|
|
|
+ }
|
|
|
+
|
|
|
+ parkingRecord.paidAmount = barnRecord.getReceivedAmount()!= null ? barnRecord.getReceivedAmount().doubleValue() : 0;;//已支付金额
|
|
|
|
|
|
|
|
|
// 根据停车记录获取拥有的优惠券
|
|
@@ -215,16 +308,6 @@ public class CarParkChargingRulesServiceImpl extends ServiceImpl<CarParkCharging
|
|
|
|
|
|
// 计算费用
|
|
|
fee = ParkingFeeCalculator.calculateParkingFee(parkingRecord, feeRule, isMonthlyCardMode);
|
|
|
- // if(parkStoredCard.getStartTime().isAfter(inDateTime) && parkStoredCard.getEndTime().isBefore(LocalDateTime.now())){
|
|
|
- // //入库时间在月卡开始日前,出库时间在结束日前 不会出现
|
|
|
- // } else if(parkStoredCard.getStartTime().isAfter(inDateTime) && parkStoredCard.getEndTime().isAfter(LocalDateTime.now())){
|
|
|
- // //入库时间在月卡开始日前,出库时间在结束日后 不会出现
|
|
|
- // } else if (parkStoredCard.getStartTime().isBefore(inDateTime) && parkStoredCard.getEndTime().isBefore(LocalDateTime.now())) {
|
|
|
- // //入库时间在月卡开始日后,出库时间在结束日前
|
|
|
- // return BigDecimal.ZERO;
|
|
|
- // } else if(parkStoredCard.getStartTime().isBefore(inDateTime) && parkStoredCard.getEndTime().isAfter(LocalDateTime.now())){
|
|
|
- // //入库时间在月卡开始日后,出库时间在结束日后
|
|
|
- // }
|
|
|
}else{
|
|
|
//直接计算费用
|
|
|
fee = ParkingFeeCalculator.calculateParkingFee(parkingRecord, feeRule, isMonthlyCardMode);
|