huangmp 4 lat temu
rodzic
commit
4215279610

+ 3 - 0
blade-service-api/estate-api/src/main/java/org/springblade/estate/entity/Car.java

@@ -16,6 +16,8 @@
  */
 package org.springblade.estate.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
@@ -135,6 +137,7 @@ public class Car extends BaseEntity {
 	*/
 		@ApiModelProperty(value = "所属停车场id")
 		@JsonSerialize(using = ToStringSerializer.class)
+		@TableField(updateStrategy = FieldStrategy.IGNORED)
 		private Long parkingLotId;
 	/**
 	* 行驶证正面图片地址

+ 10 - 4
blade-service-api/estate-api/src/main/java/org/springblade/estate/entity/ParkingArea.java

@@ -22,6 +22,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import org.springblade.core.tenant.mp.TenantEntity;
 
 /**
  * 实体类
@@ -33,7 +34,7 @@ import io.swagger.annotations.ApiModelProperty;
 @TableName("estate_parking_area")
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "ParkingArea对象", description = "ParkingArea对象")
-public class ParkingArea extends BaseEntity {
+public class ParkingArea extends TenantEntity {
 
 	private static final long serialVersionUID = 1L;
 
@@ -46,7 +47,7 @@ public class ParkingArea extends BaseEntity {
 	* 该区域下的车位宽高参数,例如:30,50 。宽30高50
 	*/
 		@ApiModelProperty(value = "该区域下的车位宽高参数,例如:30,50 。宽30高50")
-		private String pakingSpaceParams;
+		private String parkingSpaceParams;
 	/**
 	* 该区域的宽
 	*/
@@ -61,12 +62,17 @@ public class ParkingArea extends BaseEntity {
 	* 该区域在车场中的x坐标
 	*/
 		@ApiModelProperty(value = "该区域在车场中的x坐标")
-		private Double left;
+		private Double x;
 	/**
 	* 该区域在车场中的y坐标
 	*/
 		@ApiModelProperty(value = "该区域在车场中的y坐标")
-		private Double top;
+		private Double y;
+	/**
+	 * 车场id
+	 */
+	@ApiModelProperty(value = "车场id")
+	private Long parkingLotId;
 
 
 }

+ 11 - 0
blade-service-api/estate-api/src/main/java/org/springblade/estate/entity/ParkingSpace.java

@@ -50,6 +50,11 @@ public class ParkingSpace extends BaseEntity {
 		@ApiModelProperty(value = "占用车辆")
 		@JsonSerialize(using = ToStringSerializer.class)
 		private Long carId;
+	/**
+	 * 车牌号码
+	 */
+	@ApiModelProperty(value = "车牌号码")
+	private String carNo;
 	/**
 	* 是否收费
 	*/
@@ -84,6 +89,12 @@ public class ParkingSpace extends BaseEntity {
 		private String orgPosition;
 	@JsonSerialize(using = ToStringSerializer.class)
 	private Long parkingLotId;
+
+	@ApiModelProperty(value = "车场区域id")
+	@JsonSerialize(using = ToStringSerializer.class)
+	private Long parkingAreaId;
+
+
 	/**
 	* 是否占用: 1-已占用 0-未占用
 	*/

+ 18 - 0
blade-service-api/estate-api/src/main/java/org/springblade/estate/vo/ParkingLayoutVO.java

@@ -0,0 +1,18 @@
+package org.springblade.estate.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.estate.entity.ParkingArea;
+import org.springblade.estate.entity.ParkingSpace;
+
+import java.util.List;
+
+/**
+ * @author cy-computer
+ */
+@Data
+public class ParkingLayoutVO extends ParkingArea {
+
+	@ApiModelProperty(value = "该区域下的所有车位列表")
+	private List<ParkingSpace> parkingSpaceList;
+}

+ 10 - 1
blade-service/estate/src/main/java/org/springblade/estate/controller/CarController.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.estate.controller;
 
+import cn.hutool.core.convert.Convert;
 import cn.hutool.core.lang.Assert;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -98,13 +99,21 @@ public class CarController extends BladeController {
 
 	/**
 	 * 分页 车辆信息
+	 * @param car
+	 * @param query
+	 * @param bladeUser
+	 * @return
 	 */
 	@GetMapping("/list")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入car")
 	public R<IPage<CarVO>> list(@RequestParam Map<String, Object> car, Query query, BladeUser bladeUser) {
+		Integer auditStatus = Convert.toInt(car.get("auditStatus"));
+		if (auditStatus != null) {
+			car.remove("auditStatus");
+		}
 		LambdaQueryWrapper<Car> carLambdaQueryWrapper = new QueryWrapperUtil<Car>().getBasicQueryWrapperByMap(Car::getOrgPosition, car, new Car(), bladeUser, orgPositionClient);
-		IPage<Car> pages = carService.page(Condition.getPage(query), carLambdaQueryWrapper);
+		IPage<Car> pages = carService.page(Condition.getPage(query), carLambdaQueryWrapper.eq(Car::getAuditStatus, auditStatus));
 		return R.data(CarWrapper.build().pageVO(pages));
 	}
 

+ 34 - 8
blade-service/estate/src/main/java/org/springblade/estate/controller/ParkingAreaController.java

@@ -27,6 +27,7 @@ import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.estate.vo.ParkingLayoutVO;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -36,6 +37,8 @@ import org.springblade.estate.wrapper.ParkingAreaWrapper;
 import org.springblade.estate.service.IParkingAreaService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.List;
+
 /**
  *  控制器
  *
@@ -62,7 +65,7 @@ public class ParkingAreaController extends BladeController {
 	}
 
 	/**
-	 * 分页 
+	 * 分页
 	 */
 	@GetMapping("/list")
 	@ApiOperationSupport(order = 2)
@@ -74,7 +77,7 @@ public class ParkingAreaController extends BladeController {
 
 
 	/**
-	 * 自定义分页 
+	 * 自定义分页
 	 */
 	@GetMapping("/page")
 	@ApiOperationSupport(order = 3)
@@ -85,7 +88,7 @@ public class ParkingAreaController extends BladeController {
 	}
 
 	/**
-	 * 新增 
+	 * 新增
 	 */
 	@PostMapping("/save")
 	@ApiOperationSupport(order = 4)
@@ -95,7 +98,7 @@ public class ParkingAreaController extends BladeController {
 	}
 
 	/**
-	 * 修改 
+	 * 修改
 	 */
 	@PostMapping("/update")
 	@ApiOperationSupport(order = 5)
@@ -105,7 +108,7 @@ public class ParkingAreaController extends BladeController {
 	}
 
 	/**
-	 * 新增或修改 
+	 * 新增或修改
 	 */
 	@PostMapping("/submit")
 	@ApiOperationSupport(order = 6)
@@ -114,9 +117,9 @@ public class ParkingAreaController extends BladeController {
 		return R.status(parkingAreaService.saveOrUpdate(parkingArea));
 	}
 
-	
+
 	/**
-	 * 删除 
+	 * 删除
 	 */
 	@PostMapping("/remove")
 	@ApiOperationSupport(order = 7)
@@ -125,5 +128,28 @@ public class ParkingAreaController extends BladeController {
 		return R.status(parkingAreaService.deleteLogic(Func.toLongList(ids)));
 	}
 
-	
+
+	/**
+	 * 保存布局
+	 */
+	@PostMapping("/saveLayout")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "保存布局", notes = "传入ids")
+	public R saveLayout(@RequestBody List<ParkingLayoutVO> parkingLayoutVOList) {
+		parkingAreaService.saveLayout(parkingLayoutVOList);
+		return R.success("保存成功");
+	}
+
+	/**
+	 * 根据车场id获取车场布局
+	 */
+	@GetMapping("/getLayout")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "根据车场id获取车场布局", notes = "传入车场id")
+	public R getLayout(@RequestParam Long parkingLotId) {
+		List<ParkingLayoutVO> parkingLayoutVOList= parkingAreaService.getLayout(parkingLotId);
+		return R.data(parkingLayoutVOList);
+	}
+
+
 }

+ 11 - 0
blade-service/estate/src/main/java/org/springblade/estate/controller/ParkingSpaceController.java

@@ -142,4 +142,15 @@ public class ParkingSpaceController extends BladeController {
 	}
 
 
+	/**
+	 * 绑定车辆
+	 */
+	@PostMapping("/bindCar")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "绑定车辆", notes = "传入ids")
+	public R bindCar(@RequestParam Long carId,@RequestParam Long parkingSpaceId) {
+		return R.status(parkingSpaceService.bindCar(carId, parkingSpaceId));
+	}
+
+
 }

+ 4 - 3
blade-service/estate/src/main/java/org/springblade/estate/mapper/ParkingAreaMapper.xml

@@ -13,11 +13,12 @@
         <result column="status" property="status"/>
         <result column="is_deleted" property="isDeleted"/>
         <result column="name" property="name"/>
-        <result column="paking_space_params" property="pakingSpaceParams"/>
+        <result column="parking_space_params" property="parkingSpaceParams"/>
         <result column="width" property="width"/>
         <result column="height" property="height"/>
-        <result column="left" property="left"/>
-        <result column="top" property="top"/>
+        <result column="x" property="x"/>
+        <result column="y" property="y"/>
+        <result column="parking_lot_id" property="parkingLotId"/>
     </resultMap>
 
 

+ 15 - 0
blade-service/estate/src/main/java/org/springblade/estate/service/IParkingAreaService.java

@@ -20,6 +20,9 @@ import org.springblade.estate.entity.ParkingArea;
 import org.springblade.estate.vo.ParkingAreaVO;
 import org.springblade.core.mp.base.BaseService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.estate.vo.ParkingLayoutVO;
+
+import java.util.List;
 
 /**
  *  服务类
@@ -38,4 +41,16 @@ public interface IParkingAreaService extends BaseService<ParkingArea> {
 	 */
 	IPage<ParkingAreaVO> selectParkingAreaPage(IPage<ParkingAreaVO> page, ParkingAreaVO parkingArea);
 
+	/**
+	 * 保存布局
+	 * @param parkingLayoutVOList
+	 */
+    void saveLayout(List<ParkingLayoutVO> parkingLayoutVOList);
+
+	/**
+	 * 根据车场id获取车场布局
+	 * @param parkingLotId
+	 * @return
+	 */
+	List<ParkingLayoutVO> getLayout(Long parkingLotId);
 }

+ 7 - 0
blade-service/estate/src/main/java/org/springblade/estate/service/IParkingSpaceService.java

@@ -38,4 +38,11 @@ public interface IParkingSpaceService extends BaseService<ParkingSpace> {
 	 */
 	IPage<ParkingSpaceVO> selectParkingSpacePage(IPage<ParkingSpaceVO> page, ParkingSpaceVO parkingSpace);
 
+	/**
+	 * 绑定车辆
+	 * @param carId 车辆id
+	 * @param parkingSpaceId 车位id
+	 * @return
+	 */
+	Boolean bindCar(Long carId, Long parkingSpaceId);
 }

+ 61 - 0
blade-service/estate/src/main/java/org/springblade/estate/service/impl/ParkingAreaServiceImpl.java

@@ -16,13 +16,24 @@
  */
 package org.springblade.estate.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import org.springblade.core.mp.support.Condition;
 import org.springblade.estate.entity.ParkingArea;
+import org.springblade.estate.entity.ParkingSpace;
+import org.springblade.estate.service.IParkingSpaceService;
 import org.springblade.estate.vo.ParkingAreaVO;
 import org.springblade.estate.mapper.ParkingAreaMapper;
 import org.springblade.estate.service.IParkingAreaService;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.estate.vo.ParkingLayoutVO;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  *  服务实现类
@@ -33,9 +44,59 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 @Service
 public class ParkingAreaServiceImpl extends BaseServiceImpl<ParkingAreaMapper, ParkingArea> implements IParkingAreaService {
 
+	@Resource
+	private IParkingSpaceService parkingSpaceService;
+
 	@Override
 	public IPage<ParkingAreaVO> selectParkingAreaPage(IPage<ParkingAreaVO> page, ParkingAreaVO parkingArea) {
 		return page.setRecords(baseMapper.selectParkingAreaPage(page, parkingArea));
 	}
 
+    @Override
+	@Transactional(rollbackFor = Exception.class)
+    public void saveLayout(List<ParkingLayoutVO> parkingLayoutVOList) {
+		for (ParkingLayoutVO parkingLayoutVO : parkingLayoutVOList) {
+			ParkingArea parkingArea = new ParkingArea();
+			BeanUtil.copyProperties(parkingLayoutVO,parkingArea);
+			this.saveOrUpdate(parkingArea);
+			List<ParkingSpace> parkingSpaceList = parkingLayoutVO.getParkingSpaceList();
+			this.saveParkingSpace(parkingSpaceList,parkingArea.getId());
+		}
+    }
+
+	@Override
+	public List<ParkingLayoutVO> getLayout(Long parkingLotId) {
+		List<ParkingLayoutVO> parkingLayoutVOList = new ArrayList<>();
+		//根据车场id获取车场区域
+		List<ParkingArea> parkingAreas = this.list(Condition.getQueryWrapper(new ParkingArea()).lambda().eq(ParkingArea::getParkingLotId, parkingLotId));
+		if (CollUtil.isEmpty(parkingAreas)) {
+			return parkingLayoutVOList;
+		}
+		//遍历区域获取车位列表
+		for (ParkingArea parkingArea : parkingAreas) {
+			ParkingLayoutVO parkingLayoutVO = new ParkingLayoutVO();
+			BeanUtil.copyProperties(parkingArea,parkingLayoutVO);
+			//获取车位列表
+			List<ParkingSpace> parkingSpaceList = parkingSpaceService.list(Condition.getQueryWrapper(new ParkingSpace()).lambda()
+				.eq(ParkingSpace::getParkingLotId, parkingLotId)
+				.eq(ParkingSpace::getParkingAreaId, parkingArea.getId()));
+			parkingLayoutVO.setParkingSpaceList(parkingSpaceList);
+			parkingLayoutVOList.add(parkingLayoutVO);
+		}
+		return parkingLayoutVOList;
+	}
+
+
+
+	private void saveParkingSpace(List<ParkingSpace> parkingSpaceList,Long parkingAreaId) {
+		if (CollUtil.isEmpty(parkingSpaceList)) {
+			return;
+		}
+		parkingSpaceList.stream().forEach(item->item.setParkingAreaId(parkingAreaId));
+		boolean b = parkingSpaceService.saveOrUpdateBatch(parkingSpaceList);
+		if (!b) {
+			throw new RuntimeException("批量保存车位信息失败");
+		}
+	}
+
 }

+ 44 - 0
blade-service/estate/src/main/java/org/springblade/estate/service/impl/ParkingSpaceServiceImpl.java

@@ -16,13 +16,20 @@
  */
 package org.springblade.estate.service.impl;
 
+import cn.hutool.core.lang.Assert;
+import org.springblade.estate.entity.Car;
 import org.springblade.estate.entity.ParkingSpace;
+import org.springblade.estate.service.ICarService;
 import org.springblade.estate.vo.ParkingSpaceVO;
 import org.springblade.estate.mapper.ParkingSpaceMapper;
 import org.springblade.estate.service.IParkingSpaceService;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.Objects;
 
 /**
  * 车位信息 服务实现类
@@ -33,9 +40,46 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 @Service
 public class ParkingSpaceServiceImpl extends BaseServiceImpl<ParkingSpaceMapper, ParkingSpace> implements IParkingSpaceService {
 
+	@Resource
+	private ICarService carService;
+
 	@Override
 	public IPage<ParkingSpaceVO> selectParkingSpacePage(IPage<ParkingSpaceVO> page, ParkingSpaceVO parkingSpace) {
 		return page.setRecords(baseMapper.selectParkingSpacePage(page, parkingSpace));
 	}
 
+    @Override
+	@Transactional(rollbackFor = Exception.class)
+    public Boolean bindCar(Long carId, Long parkingSpaceId) {
+		ParkingSpace parkingSpace = this.getById(parkingSpaceId);
+		Assert.notNull(parkingSpace, "找不到对应的车位信息");
+		Car car = carService.getById(carId);
+		Assert.notNull(parkingSpace, "找不到车辆信息");
+
+		if (!Objects.isNull(parkingSpace.getCarId()) && !Objects.equals(parkingSpace.getCarId(), carId)) {
+			//换绑车位
+			this.changeInitialCar(parkingSpace.getCarId());
+		}
+		parkingSpace.setCarId(carId);
+		parkingSpace.setIsUsed(1);
+		parkingSpace.setCarNo(car.getNumber());
+
+
+		car.setParkingLotId(parkingSpace.getParkingLotId());
+		carService.updateById(car);
+		return this.updateById(parkingSpace);
+    }
+
+	/**
+	 * 将初始的车辆车场置空
+	 * @param carId
+	 */
+	private void changeInitialCar(Long carId) {
+		Car initialCar = carService.getById(carId);
+		if (initialCar != null) {
+			initialCar.setParkingLotId(null);
+			carService.updateById(initialCar);
+		}
+	}
+
 }