|
@@ -1,38 +1,38 @@
|
|
|
package com.qmrb.system.service.impl;
|
|
|
|
|
|
-import java.time.LocalDateTime;
|
|
|
-import java.time.format.DateTimeFormatter;
|
|
|
-import java.util.*;
|
|
|
-import java.util.stream.Collectors;
|
|
|
-
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
import cn.hutool.core.date.DateField;
|
|
|
import cn.hutool.core.date.DateUnit;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
-import com.alibaba.fastjson.JSON;
|
|
|
+import cn.hutool.core.lang.Assert;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.qmrb.system.common.result.Result;
|
|
|
+import com.qmrb.system.converter.VirtualParkingSlotConverter;
|
|
|
import com.qmrb.system.framework.security.util.SecurityUtils;
|
|
|
+import com.qmrb.system.mapper.VirtualParkingSlotMapper;
|
|
|
import com.qmrb.system.pojo.entity.Contract;
|
|
|
import com.qmrb.system.pojo.entity.ContractPlaceNumberRel;
|
|
|
-import com.qmrb.system.service.IContractPlaceNumberRelHisService;
|
|
|
-import com.qmrb.system.utils.DateUtils;
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
-import com.qmrb.system.converter.VirtualParkingSlotConverter;
|
|
|
import com.qmrb.system.pojo.entity.VirtualParkingSlot;
|
|
|
import com.qmrb.system.pojo.form.VirtualParkingSlotForm;
|
|
|
-import com.qmrb.system.pojo.vo.VirtualParkingSlotVO;
|
|
|
import com.qmrb.system.pojo.query.VirtualParkingSlotQuery;
|
|
|
-import com.qmrb.system.mapper.VirtualParkingSlotMapper;
|
|
|
+import com.qmrb.system.pojo.vo.VirtualParkingSlotVO;
|
|
|
+import com.qmrb.system.service.IContractPlaceNumberRelHisService;
|
|
|
import com.qmrb.system.service.IVirtualParkingSlotService;
|
|
|
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.qmrb.system.utils.DateUtils;
|
|
|
+import jakarta.validation.Valid;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
-import cn.hutool.core.collection.CollectionUtil;
|
|
|
-import cn.hutool.core.util.StrUtil;
|
|
|
-import cn.hutool.core.lang.Assert;
|
|
|
-import jakarta.validation.Valid;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -101,6 +101,30 @@ public class VirtualParkingSlotServiceImpl extends ServiceImpl<VirtualParkingSlo
|
|
|
.ne(VirtualParkingSlot::getStatus,"2").orderByAsc(VirtualParkingSlot::getId));
|
|
|
if(CollectionUtil.isNotEmpty(list)){
|
|
|
List<VirtualParkingSlot> allVirtuals = this.list(new LambdaQueryWrapper<VirtualParkingSlot>().eq(VirtualParkingSlot::getContractId, contract.getId()).orderByAsc(VirtualParkingSlot::getId));
|
|
|
+
|
|
|
+ // 检查已占用的车位数量
|
|
|
+ List<VirtualParkingSlot> occupiedSlots = list.stream()
|
|
|
+ .filter(slot -> StrUtil.equals(slot.getStatus(), "1"))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 检查大型和小型车位的已占用数量
|
|
|
+ long occupiedLargeCount = occupiedSlots.stream()
|
|
|
+ .filter(slot -> StrUtil.equals(slot.getSlotType(), "large"))
|
|
|
+ .count();
|
|
|
+ long occupiedSmallCount = occupiedSlots.stream()
|
|
|
+ .filter(slot -> StrUtil.equals(slot.getSlotType(), "small"))
|
|
|
+ .count();
|
|
|
+
|
|
|
+ int largeSlotNum = contract.getMaxParkingLotNum() - contract.getSmallParkingLotNum();
|
|
|
+
|
|
|
+ // 检查新配置的车位数是否能满足已占用的车位
|
|
|
+ if (occupiedLargeCount > largeSlotNum || occupiedSmallCount > contract.getSmallParkingLotNum()) {
|
|
|
+ log.warn("合同车位修改失败: 大型车已占用{}个,配置{}个; 小型车已占用{}个,配置{}个",
|
|
|
+ occupiedLargeCount, largeSlotNum, occupiedSmallCount, contract.getSmallParkingLotNum());
|
|
|
+ // 如果当前占用的车位超出了新配置的车位数,则不允许修改
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
// 若包租协议得最大车位数小于虚拟车位数,则停用超出部分得虚拟车位
|
|
|
if(contract.getMaxParkingLotNum() < list.size()){
|
|
|
List<VirtualParkingSlot> outVirtuals = list.subList(contract.getMaxParkingLotNum(), list.size());
|
|
@@ -167,11 +191,13 @@ public class VirtualParkingSlotServiceImpl extends ServiceImpl<VirtualParkingSlo
|
|
|
list = new ArrayList<>();
|
|
|
// Integer index = 1;
|
|
|
Long index = lastOne != null ? lastOne.getId() + 1 : 1L;
|
|
|
- for(int i = contract.getMaxParkingLotNum(); i > 0;i--){
|
|
|
+ // 计算大型车位数量
|
|
|
+ int largeSlotNum = contract.getMaxParkingLotNum() - contract.getSmallParkingLotNum();
|
|
|
+ for(int i = 0; i < contract.getMaxParkingLotNum(); i++){
|
|
|
VirtualParkingSlot virtualParkingSlot = new VirtualParkingSlot();
|
|
|
virtualParkingSlot.setContractId(contract.getId());
|
|
|
virtualParkingSlot.setVirtualSlotNumber("A"+index);
|
|
|
- if(i >= contract.getSmallParkingLotNum()){
|
|
|
+ if(i < largeSlotNum){
|
|
|
virtualParkingSlot.setSlotType("large");
|
|
|
}else{
|
|
|
virtualParkingSlot.setSlotType("small");
|
|
@@ -187,15 +213,14 @@ public class VirtualParkingSlotServiceImpl extends ServiceImpl<VirtualParkingSlo
|
|
|
public void updateSlotType(List<VirtualParkingSlot> list,Contract contract){
|
|
|
for (int i = 0; i < list.size(); i++) {
|
|
|
// 更新非停用得
|
|
|
- if(!StrUtil.equals(list.get(0).getStatus(),"2")){
|
|
|
- if(i < contract.getSmallParkingLotNum()){
|
|
|
- list.get(i).setSlotType("small");
|
|
|
- }else{
|
|
|
+ if(!StrUtil.equals(list.get(i).getStatus(),"2")){
|
|
|
+ if(i < contract.getMaxParkingLotNum() - contract.getSmallParkingLotNum()){
|
|
|
list.get(i).setSlotType("large");
|
|
|
+ }else{
|
|
|
+ list.get(i).setSlotType("small");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
/**更新
|
|
|
* */
|
|
@@ -247,7 +272,7 @@ public class VirtualParkingSlotServiceImpl extends ServiceImpl<VirtualParkingSlo
|
|
|
Assert.isTrue(CollectionUtil.isNotEmpty(freeVirtualParkingSlots),"无可用车位");
|
|
|
virtualParkingSlot = freeVirtualParkingSlots.get(0);
|
|
|
virtualParkingSlot.setStatus("1");//占用
|
|
|
- virtualParkingSlot.setSlotType(StrUtil.equals("1",contractPlaceNumberRel.getCarType())? "small" : "large");
|
|
|
+ virtualParkingSlot.setSlotType(StrUtil.equals("1",contractPlaceNumberRel.getCarType())? "large" : "small");
|
|
|
virtualParkingSlot.setCurrentPlateNumber(contractPlaceNumberRel.getPlateNumber());
|
|
|
virtualParkingSlot.setLastOccupiedTime(contractPlaceNumberRel.getStartTime());
|
|
|
virtualParkingSlot.setLastReleasedTime(contractPlaceNumberRel.getEndTime());
|
|
@@ -352,7 +377,7 @@ public class VirtualParkingSlotServiceImpl extends ServiceImpl<VirtualParkingSlo
|
|
|
log.info("定时释放虚拟车位数:" + releasedList.size() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
|
|
releasedList = releasedList.stream().map(iter->{
|
|
|
iter.setCurrentPlateNumber(null);
|
|
|
- iter.setSlotType("small");
|
|
|
+ // 不改变车位类型,保持原有的大小类型
|
|
|
iter.setStatus("0");
|
|
|
return iter;
|
|
|
}).collect(Collectors.toList());
|