package com.ruoyi.integration.barrierGate.server;
|
|
import com.ruoyi.account.api.feignClient.AppUserCarClient;
|
import com.ruoyi.account.api.feignClient.AppUserClient;
|
import com.ruoyi.account.api.model.TAppUser;
|
import com.ruoyi.account.api.model.TAppUserCar;
|
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 com.ruoyi.order.api.feignClient.ChargingOrderClient;
|
import com.ruoyi.order.api.model.TChargingOrder;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.text.SimpleDateFormat;
|
import java.time.LocalDateTime;
|
import java.time.ZoneId;
|
import java.time.format.DateTimeFormatter;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* @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;
|
|
@Resource
|
private ChargingOrderClient chargingOrderClient;
|
|
@Resource
|
private AppUserClient appUserClient;
|
|
|
|
|
|
/**
|
* 云停车入场记录
|
* @param order
|
*/
|
public void cloudParkingInOrder(CloudParkingOrder order) {
|
TParkingRecord parkingRecord = new TParkingRecord();
|
parkingRecord.setLicensePlate(order.getPlate());
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
|
String code = "TC" + Double.valueOf(Math.random() * 1000).intValue() + sdf.format(new Date());
|
parkingRecord.setCode(code);
|
parkingRecord.setVehicleColor(order.getPlateColor());
|
TParkingLot data = parkingLotClient.getParkingLotByAppKey(order.getAppkey()).getData();
|
parkingRecord.setName(data.getName());
|
parkingRecord.setParkingLotId(data.getId());
|
LocalDateTime parse = LocalDateTime.parse(order.getEnterDateTime(), DateTimeFormatter.ISO_DATE_TIME);
|
parse = parse.plusHours(8);
|
parkingRecord.setInParkingTime(parse);
|
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();
|
TParkingLot parkingLot = parkingLotClient.getParkingLotByAppKey(order.getAppkey()).getData();
|
LocalDateTime parse = LocalDateTime.parse(order.getLeaveDateTime(), DateTimeFormatter.ISO_DATE_TIME);
|
parse = parse.plusHours(8);
|
parkingRecord.setOutParkingTime(parse);
|
parkingRecord.setParkingDuration(Integer.valueOf(order.getLongTime()));
|
parkingRecord.setOrderAmount(new BigDecimal(order.getReceivable()));
|
parkingRecord.setPayment(new BigDecimal(order.getPayment()));
|
parkingRecord.setPayType(order.getPayType());
|
BigDecimal payment = new BigDecimal(order.getPayment());
|
parkingRecord.setStatus(BigDecimal.ZERO.compareTo(payment) == 0 ? 2 : 3);
|
parkingRecord.setOutParkingType(BigDecimal.ZERO.compareTo(payment) == 0 ? 2 : 1);
|
parkingRecord.setTitle("【停车缴费】" + payment + "元");
|
TAppUserCar appUserCar = appUserCarClient.getAppUserCarByLicensePlate(parkingRecord.getLicensePlate()).getData();
|
if(null != appUserCar){
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
List<TChargingOrder> data = chargingOrderClient.getCarChargingOrder(appUserCar.getId(), parkingRecord.getInParkingTime().format(formatter), LocalDateTime.now().format(formatter)).getData();
|
if(null != data && data.size() > 0){
|
TChargingOrder chargingOrder = data.get(0);
|
parkingRecord.setAppUserId(chargingOrder.getAppUserId());
|
parkingRecord.setChargingOrderId(chargingOrder.getId());
|
TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData();
|
parkingRecord.setPhone(appUser.getPhone());
|
parkingRecord.setFreeDuration(parkingLot.getChargeFreeDuration());
|
//超时占位费
|
long out = parkingRecord.getOutParkingTime().atZone(ZoneId.systemDefault()).toEpochSecond();
|
long in = parkingRecord.getInParkingTime().atZone(ZoneId.systemDefault()).toEpochSecond();
|
long m = (out - in) / 60;
|
parkingRecord.setTimeoutAmount(m > parkingLot.getChargeFreeDuration() ? new BigDecimal(m - parkingLot.getChargeFreeDuration()).multiply(parkingLot.getChargeRate()) : BigDecimal.ZERO);
|
|
}else{
|
parkingRecord.setFreeDuration(parkingLot.getNonChargeFreeDuration());
|
//超时占位费
|
long out = parkingRecord.getOutParkingTime().atZone(ZoneId.systemDefault()).toEpochSecond();
|
long in = parkingRecord.getInParkingTime().atZone(ZoneId.systemDefault()).toEpochSecond();
|
long m = (out - in) / 60;
|
parkingRecord.setTimeoutAmount(m > parkingLot.getNonChargeFreeDuration() ? new BigDecimal(m - parkingLot.getNonChargeFreeDuration()).multiply(parkingLot.getChargeRate()) : BigDecimal.ZERO);
|
}
|
}
|
parkingRecord.setFreeAmount(parkingRecord.getOrderAmount().subtract(parkingRecord.getPayment()));
|
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" + Double.valueOf(Math.random() * 1000).intValue() + sdf.format(new Date());
|
parkingRecord.setCode(code);
|
parkingRecord.setVehicleColor(order.getPlatecolor());
|
TParkingLot data = parkingLotClient.getParkingLotByAppKey(order.getAppkey()).getData();
|
parkingRecord.setName(data.getName());
|
parkingRecord.setParkingLotId(data.getId());
|
LocalDateTime parse = LocalDateTime.parse(order.getEntertime(), DateTimeFormatter.ISO_DATE_TIME);
|
parse = parse.plusHours(8);
|
parkingRecord.setInParkingTime(parse);
|
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();
|
LocalDateTime parse = LocalDateTime.parse(order.getLeavetime(), DateTimeFormatter.ISO_DATE_TIME);
|
parse = parse.plusHours(8);
|
parkingRecord.setOutParkingTime(parse);
|
parkingRecord.setParkingDuration(Integer.valueOf(order.getLongTime()));
|
parkingRecord.setOrderAmount(new BigDecimal(order.getMoney()));
|
parkingRecord.setPayment(new BigDecimal(order.getMoney()));
|
BigDecimal payment = new BigDecimal(order.getMoney());
|
parkingRecord.setStatus(BigDecimal.ZERO.compareTo(payment) == 0 ? 2 : 3);
|
parkingRecord.setOutParkingType(BigDecimal.ZERO.compareTo(payment) == 0 ? 2 : 1);
|
parkingRecord.setTitle("【停车缴费】" + payment + "元");
|
TAppUserCar appUserCar = appUserCarClient.getAppUserCarByLicensePlate(parkingRecord.getLicensePlate()).getData();
|
if(null != appUserCar){
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
List<TChargingOrder> data = chargingOrderClient.getCarChargingOrder(appUserCar.getId(), parkingRecord.getInParkingTime().format(formatter), LocalDateTime.now().format(formatter)).getData();
|
if(null != data && data.size() > 0){
|
TChargingOrder chargingOrder = data.get(0);
|
parkingRecord.setAppUserId(chargingOrder.getAppUserId());
|
parkingRecord.setChargingOrderId(chargingOrder.getId());
|
}
|
}
|
parkingRecordClient.updateParkingRecord(parkingRecord);
|
}
|
|
|
/**
|
* 线下停车场实时车位
|
* @param parkingSpace
|
*/
|
public void offlineParkingSpace(OfflineParkingSpace parkingSpace){
|
|
}
|
}
|