基于JAVA的小區(qū)停車管理系統(tǒng)畢業(yè)設(shè)計(jì)作品分享一下塔猾,希望能幫助到有需要的同學(xué)們妄均。
【背景/簡介】
基于JAVA的停車管理系統(tǒng)由車主用戶管理桑孩、車主資源管理竟坛、和車輛進(jìn)出記錄管理三大模塊組成闽巩,整體簡單實(shí)用,構(gòu)成了停車管理系統(tǒng)的核心功能担汤。本篇文章為大家展示基于JAVA實(shí)現(xiàn)的停車管理系統(tǒng)功能涎跨,有需者可參考。
【技術(shù)框架】
系統(tǒng)采用的技術(shù)是基于JAVA語言開發(fā)的后臺(tái)管理系統(tǒng)崭歧,前后端不分離隅很,數(shù)據(jù)庫采用mysql。技術(shù)棧如下:
一率碾、后端技術(shù):SpringBoot2.0 + Spring Data Jpa + Shiro
二叔营、前端技術(shù):Layui + thymeleaf
【核心開發(fā)】
一、數(shù)據(jù)庫設(shè)計(jì)
核心表包括車主用戶管理表所宰、車位資源表绒尊、車輛進(jìn)出記錄表,具體字段如下:
(1)車主用戶管理表(or_carOwner)
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String name;
// 車牌號(hào)碼
private String plateNumber;
// 電話
private String phone;
// 創(chuàng)建時(shí)間
@CreatedDate
private Date createDate;
// 數(shù)據(jù)狀態(tài)
private Byte status = StatusEnum.OK.getCode();
(2)車位資源表(or_carPort)
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
// 車位編碼
private String portNum;
// 開放開始時(shí)間
@DateTimeFormat(pattern="HH:mm:ss")
@Temporal(TemporalType.TIME)
private Date beginTime;
// 開放結(jié)束時(shí)間,@Temporal這個(gè)注解是用來轉(zhuǎn)化mysql time類型的
@DateTimeFormat(pattern="HH:mm:ss")
@Temporal(TemporalType.TIME)
private Date endTime;
// 是否空余 0在用 1空余
private Byte ifFree;
// 當(dāng)前車主車牌
private String carNum;
// 創(chuàng)建時(shí)間
@CreatedDate
private Date createDate;
// 數(shù)據(jù)狀態(tài)
private Byte status = StatusEnum.OK.getCode();
(3)車輛進(jìn)出記錄表(or_carRecord)
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
// 車牌號(hào)碼
private String plateNumber;
// 車位編碼
private String portNum;
private String name;
// 進(jìn)入時(shí)間
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date etherTime;
// 離開時(shí)間
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date leaveTime;
// 創(chuàng)建時(shí)間
@CreatedDate
private Date createDate;
// 數(shù)據(jù)狀態(tài)
private Byte status = StatusEnum.OK.getCode();
【功能展示】
一仔粥、車主用戶管理
二垒酬、車位資源管理
三、車輛進(jìn)出記錄
(1)車輛入庫管理件炉,當(dāng)車輛入庫時(shí)候勘究,記錄車牌號(hào)碼、車位編碼以及進(jìn)入時(shí)間斟冕。
車輛入庫出現(xiàn)以下情況則不能入庫成功:
A口糕、當(dāng)車輛已經(jīng)入庫,但尚未出庫時(shí)候磕蛇,如果繼續(xù)對(duì)該車輛入庫景描,會(huì)彈出提示“該車主目前已經(jīng)入庫停車中十办,不能重復(fù)添加入庫”。
B超棺、當(dāng)入庫時(shí)間大于當(dāng)前時(shí)間向族,也會(huì)進(jìn)行彈框提示
當(dāng)車牌號(hào)碼符合入庫條件時(shí)候,則保存成功棠绘,同時(shí)車位狀態(tài)變成在用件相,以及展示在用的車牌號(hào):
入庫核心代碼如下:
/**
* 保存進(jìn)入的數(shù)據(jù),車輛入庫
*/
@PostMapping("/save")
@ResponseBody
public ResultVo save(@Validated CarRecordValid valid, CarRecord carRecord) throws Exception {
if(carRecord.getEtherTime() == null){
return ResultVoUtil.error("車輛入庫時(shí)間不能為空");
}else if(carRecord.getEtherTime().after(new Date())){
return ResultVoUtil.error("車輛入庫時(shí)間不能大于當(dāng)前時(shí)間");
}
//查詢車位的信息
CarPort carPort = carPortService.getByPortNum(carRecord.getPortNum());
//轉(zhuǎn)化為long格式氧苍,才能用compareTo()方法進(jìn)行比較,判斷車輛入庫時(shí)間不在車位的開放時(shí)間內(nèi)
String timeNow = SimpleDateFormat.getTimeInstance(2).format(carRecord.getEtherTime());
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
Long timeNowNow= sdf.parse(timeNow).getTime();
long startTime = carPort.getBeginTime().getTime();
Long endTime= carPort.getEndTime().getTime();
//當(dāng)前時(shí)間大于開始時(shí)間 小于結(jié)束時(shí)間
if (!(timeNowNow.compareTo(endTime) < 0 && timeNowNow.compareTo(startTime) > 0)) {
return ResultVoUtil.error("車庫開放時(shí)間在"+carPort.getBeginTime()+" - "+carPort.getEndTime());
}
//獲取該車牌號(hào)現(xiàn)有所有的記錄
List<CarRecord> carRecordList = carRecordService.getAllByPlateNumberOrderById(carRecord.getPlateNumber());
if(carRecordList.size() > 0){
//判斷最近一條有沒有在入庫但還沒出庫的數(shù)據(jù)
CarRecord newCarRecord = carRecordList.get(0);
if(newCarRecord.getEtherTime() != null && newCarRecord.getLeaveTime() == null){
return ResultVoUtil.error("該車主目前已經(jīng)在入庫停車中夜矗,不能重復(fù)添加入庫");
}
// 保存數(shù)據(jù)
carRecordService.save(carRecord);
//設(shè)置車位在用
carPort.setIfFree((byte)0);//在用
carPort.setCarNum(carRecord.getPlateNumber());//在用車牌
carPortService.save(carPort);
//查看用戶是否存在,不存在就增加
CarOwner carOwner = carOwnerService.getByPlateNum(carRecord.getPlateNumber());
if(carOwner == null){
CarOwner owner = new CarOwner();
owner.setPlateNumber(carRecord.getPlateNumber());
owner.setName(carRecord.getPlateNumber()+"-車主");
carOwnerService.save(owner);
}
return ResultVoUtil.SAVE_SUCCESS;
}else {
// 保存數(shù)據(jù)
carRecordService.save(carRecord);
//設(shè)置車位在用
carPort.setIfFree((byte)0);//在用
carPort.setCarNum(carRecord.getPlateNumber());//在用車牌
carPortService.save(carPort);
//查看用戶是否存在让虐,不存在就增加
CarOwner carOwner = carOwnerService.getByPlateNum(carRecord.getPlateNumber());
if(carOwner == null){
CarOwner owner = new CarOwner();
owner.setPlateNumber(carRecord.getPlateNumber());
owner.setName(carRecord.getPlateNumber()+"-車主");
carOwnerService.save(owner);
}
return ResultVoUtil.SAVE_SUCCESS;
}
}
(2)車輛出庫管理紊撕,當(dāng)車輛出庫時(shí)候,記錄車牌號(hào)碼赡突、車位編碼以及離開時(shí)間对扶。
車輛出庫出現(xiàn)以下情況則不能出庫成功:
A、當(dāng)車輛尚未有最新入庫操作惭缰,如果繼續(xù)對(duì)該車輛出庫浪南,會(huì)彈出提示“該車主沒有最新入庫停車操作,不能做出庫操作”从媚。
B逞泄、當(dāng)出庫的車位選擇錯(cuò)誤時(shí)候患整,會(huì)做對(duì)應(yīng)的提示“該車主入庫的車位為xxx拜效,與出庫的車位跟不一致,請(qǐng)重新選擇車位”:
當(dāng)出庫成功后各谚,車位對(duì)應(yīng)就會(huì)變成空閑:
出庫核心代碼如下:
/**
* 保存離開記錄,車輛出庫
*/
@PostMapping("/saveLeaveRecond")
@ResponseBody
public ResultVo saveLeaveRecond(@Validated CarRecordValid valid, CarRecord carRecord) {
if(carRecord.getLeaveTime() == null){
return ResultVoUtil.error("車輛出庫時(shí)間不能為空");
}
//獲取該車牌號(hào)現(xiàn)有所有的記錄
List<CarRecord> carRecordList = carRecordService.getAllByPlateNumberOrderById(carRecord.getPlateNumber());
if(carRecordList.size() > 0){
//判斷最近一條有沒有在入庫但還沒出庫的數(shù)據(jù)
CarRecord newCarRecord = carRecordList.get(0);
if(newCarRecord.getEtherTime() != null && newCarRecord.getLeaveTime() != null){
return ResultVoUtil.error("該車主沒有最新入庫停車操作紧憾,不能做出庫操作");
}else if(!newCarRecord.getPortNum().equals(carRecord.getPortNum())){
return ResultVoUtil.error("該車主入庫的車位為"+newCarRecord.getPortNum()+",與出庫的車位跟不一致昌渤,請(qǐng)重新選擇車位");
}else if(carRecord.getLeaveTime().before(newCarRecord.getEtherTime())){
return ResultVoUtil.error("車輛出庫時(shí)間不能小于入庫時(shí)間");
}
// 保存數(shù)據(jù)
carRecord.setEtherTime(newCarRecord.getEtherTime());
carRecord.setId(newCarRecord.getId());
carRecord.setCreateDate(newCarRecord.getCreateDate());
carRecord.setUpdateDate(new Date());
carRecordService.save(carRecord);
//設(shè)置車位在用
CarPort carPort = carPortService.getByPortNum(carRecord.getPortNum());
carPort.setIfFree((byte)1);//空余
carPort.setCarNum(null);//在用車牌
carPortService.save(carPort);
return ResultVoUtil.SAVE_SUCCESS;
}else {
return ResultVoUtil.error("該車主沒有最新入庫停車操作赴穗,不能做出庫操作");
}
}
【總結(jié)】
小區(qū)停車管理系統(tǒng)主要是圍繞車輛入庫和出庫兩個(gè)核心功能進(jìn)行拓展,并進(jìn)行一系列的校驗(yàn)控制膀息,上手容易般眉。