修改配置,车辆管理

This commit is contained in:
lcj
2025-10-25 17:01:15 +08:00
parent bc891327c9
commit cc23a308c1
12 changed files with 964 additions and 47 deletions

View File

@ -321,8 +321,8 @@ ys7:
app-key: xxx app-key: xxx
app-secret: xxx app-secret: xxx
job: job:
capture-enabled: true # 控制是否启用萤石抓拍任务 capture-enabled: false # 控制是否启用萤石抓拍任务
device-sync-enabled: true # 控制是否同步萤石设备 device-sync-enabled: false # 控制是否同步萤石设备
# 斯巴达算法 # 斯巴达算法
sparta: sparta:
url: http://119.3.204.120:8040 url: http://119.3.204.120:8040

View File

@ -1,45 +0,0 @@
package org.dromara.job.once;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.dromara.manager.ys7manager.Ys7Manager;
import org.dromara.manager.ys7manager.vo.Ys7QueryDeviceResponseVo;
import org.dromara.other.service.IOthYs7DeviceService;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 同步摄像头设备数据
*
* @author lilemy
* @date 2025/6/13 11:08
*/
@Slf4j
@Component
public class FullSyncYs7DeviceData implements CommandLineRunner {
@Resource
private Ys7Manager ys7Manager;
@Resource
private IOthYs7DeviceService ys7DeviceService;
@Override
public void run(String... args) throws Exception {
log.info("开始同步摄像头设备数据");
try {
List<Ys7QueryDeviceResponseVo> ys7QueryDeviceList = ys7Manager.queryAllDeviceList();
Boolean result = ys7DeviceService.saveOrUpdateByDeviceList(ys7QueryDeviceList);
if (result) {
log.info("摄像头设备数据同步成功");
} else {
log.info("没有需要同步的设备");
}
} catch (Exception e) {
log.info("摄像头设备数据同步失败", e);
}
}
}

View File

@ -162,6 +162,12 @@ public class PgsProgressPlanServiceImpl extends ServiceImpl<PgsProgressPlanMappe
Long id = progressPlan.getId(); Long id = progressPlan.getId();
List<PgsProgressPlanDetailCreateDto> detailList = req.getDetailList(); List<PgsProgressPlanDetailCreateDto> detailList = req.getDetailList();
if (CollUtil.isNotEmpty(detailList)) { if (CollUtil.isNotEmpty(detailList)) {
// 判断详情数量是否合法
boolean isAnyEmpty = detailList.stream()
.allMatch(detail -> detail.getPlanNumber().compareTo(BigDecimal.ZERO) <= 0);
if (isAnyEmpty) {
throw new ServiceException("新增进度计划详情失败,请进行均分", HttpStatus.BAD_REQUEST);
}
List<PgsProgressPlanDetail> newDetailList = detailList.stream().map(detail -> { List<PgsProgressPlanDetail> newDetailList = detailList.stream().map(detail -> {
PgsProgressPlanDetail progressPlanDetail = new PgsProgressPlanDetail(); PgsProgressPlanDetail progressPlanDetail = new PgsProgressPlanDetail();
BeanUtils.copyProperties(detail, progressPlanDetail); BeanUtils.copyProperties(detail, progressPlanDetail);

View File

@ -0,0 +1,106 @@
package org.dromara.vehicle.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.vehicle.domain.bo.VehVehicleInfoBo;
import org.dromara.vehicle.domain.vo.VehVehicleInfoVo;
import org.dromara.vehicle.service.IVehVehicleInfoService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 车辆信息
*
* @author lilemy
* @date 2025-10-25
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/vehicle/vehicleInfo")
public class VehVehicleInfoController extends BaseController {
private final IVehVehicleInfoService vehVehicleInfoService;
/**
* 查询车辆信息列表
*/
@SaCheckPermission("vehicle:vehicleInfo:list")
@GetMapping("/list")
public TableDataInfo<VehVehicleInfoVo> list(VehVehicleInfoBo bo, PageQuery pageQuery) {
return vehVehicleInfoService.queryPageList(bo, pageQuery);
}
/**
* 导出车辆信息列表
*/
@SaCheckPermission("vehicle:vehicleInfo:export")
@Log(title = "车辆信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(VehVehicleInfoBo bo, HttpServletResponse response) {
List<VehVehicleInfoVo> list = vehVehicleInfoService.queryList(bo);
ExcelUtil.exportExcel(list, "车辆信息", VehVehicleInfoVo.class, response);
}
/**
* 获取车辆信息详细信息
*
* @param id 主键
*/
@SaCheckPermission("vehicle:vehicleInfo:query")
@GetMapping("/{id}")
public R<VehVehicleInfoVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(vehVehicleInfoService.queryById(id));
}
/**
* 新增车辆信息
*/
@SaCheckPermission("vehicle:vehicleInfo:add")
@Log(title = "车辆信息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody VehVehicleInfoBo bo) {
return toAjax(vehVehicleInfoService.insertByBo(bo));
}
/**
* 修改车辆信息
*/
@SaCheckPermission("vehicle:vehicleInfo:edit")
@Log(title = "车辆信息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody VehVehicleInfoBo bo) {
return toAjax(vehVehicleInfoService.updateByBo(bo));
}
/**
* 删除车辆信息
*
* @param ids 主键串
*/
@SaCheckPermission("vehicle:vehicleInfo:remove")
@Log(title = "车辆信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(vehVehicleInfoService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,148 @@
package org.dromara.vehicle.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serial;
import java.time.LocalDate;
/**
* 车辆信息对象 veh_vehicle_info
*
* @author lilemy
* @date 2025-10-25
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("veh_vehicle_info")
public class VehVehicleInfo extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 项目ID
*/
private Long projectId;
/**
* 车牌号
*/
private String plateNumber;
/**
* 车辆品牌
*/
private String vehicleBrand;
/**
* 车辆类型
*/
private String vehicleType;
/**
* 车辆颜色
*/
private String vehicleColor;
/**
* 座位数
*/
private Integer seatCount;
/**
* 燃料类型
*/
private String fuelType;
/**
* 车辆状态
*/
private String vehicleStatus;
/**
* 车长(米)
*/
private BigDecimal vehicleLength;
/**
* 车宽(米)
*/
private BigDecimal vehicleWidth;
/**
* 车高(米)
*/
private BigDecimal vehicleHeight;
/**
* 轴距(米)
*/
private BigDecimal wheelBase;
/**
* 轮距(米)
*/
private BigDecimal wheelTrack;
/**
* 车辆性质
*/
private String ownerType;
/**
* 租赁方信息
*/
private String rentalCompany;
/**
* 登记证书编号(车管所登记凭证)
*/
private String registrationCertNo;
/**
* 登记日期
*/
private LocalDate registerDate;
/**
* 购置日期
*/
private LocalDate purchaseDate;
/**
* 购置价格
*/
private BigDecimal purchasePrice;
/**
* 保险到期时间
*/
private LocalDate insuranceExpiry;
/**
* 年检到期时间
*/
private LocalDate inspectionExpiry;
/**
* 附件ID
*/
private String fileIds;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,158 @@
package org.dromara.vehicle.domain.bo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.vehicle.domain.VehVehicleInfo;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
* 车辆信息业务对象 veh_vehicle_info
*
* @author lilemy
* @date 2025-10-25
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = VehVehicleInfo.class, reverseConvertGenerate = false)
public class VehVehicleInfoBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = {EditGroup.class})
private Long id;
/**
* 项目ID
*/
@NotNull(message = "项目ID不能为空", groups = {AddGroup.class, EditGroup.class})
private Long projectId;
/**
* 车牌号
*/
@NotBlank(message = "车牌号不能为空", groups = {AddGroup.class, EditGroup.class})
private String plateNumber;
/**
* 车辆品牌
*/
@NotBlank(message = "车辆品牌不能为空", groups = {AddGroup.class, EditGroup.class})
private String vehicleBrand;
/**
* 车辆类型
*/
@NotBlank(message = "车辆类型不能为空", groups = {AddGroup.class, EditGroup.class})
private String vehicleType;
/**
* 车辆颜色
*/
@NotBlank(message = "车辆颜色不能为空", groups = {AddGroup.class, EditGroup.class})
private String vehicleColor;
/**
* 座位数
*/
@NotNull(message = "座位数不能为空", groups = {AddGroup.class, EditGroup.class})
private Integer seatCount;
/**
* 燃料类型
*/
@NotBlank(message = "燃料类型不能为空", groups = {AddGroup.class, EditGroup.class})
private String fuelType;
/**
* 车辆状态
*/
@NotBlank(message = "车辆状态不能为空", groups = {AddGroup.class, EditGroup.class})
private String vehicleStatus;
/**
* 车长(米)
*/
private BigDecimal vehicleLength;
/**
* 车宽(米)
*/
private BigDecimal vehicleWidth;
/**
* 车高(米)
*/
private BigDecimal vehicleHeight;
/**
* 轴距(米)
*/
private BigDecimal wheelBase;
/**
* 轮距(米)
*/
private BigDecimal wheelTrack;
/**
* 车辆性质
*/
@NotBlank(message = "车辆性质不能为空", groups = {AddGroup.class, EditGroup.class})
private String ownerType;
/**
* 租赁方信息
*/
private String rentalCompany;
/**
* 登记证书编号(车管所登记凭证)
*/
private String registrationCertNo;
/**
* 登记日期
*/
private LocalDate registerDate;
/**
* 购置日期
*/
private LocalDate purchaseDate;
/**
* 购置价格
*/
private BigDecimal purchasePrice;
/**
* 保险到期时间
*/
private LocalDate insuranceExpiry;
/**
* 年检到期时间
*/
private LocalDate inspectionExpiry;
/**
* 附件ID
*/
private String fileIds;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,187 @@
package org.dromara.vehicle.domain.vo;
import java.math.BigDecimal;
import org.dromara.vehicle.domain.VehVehicleInfo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
/**
* 车辆信息视图对象 veh_vehicle_info
*
* @author lilemy
* @date 2025-10-25
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = VehVehicleInfo.class)
public class VehVehicleInfoVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 项目ID
*/
@ExcelProperty(value = "项目ID")
private Long projectId;
/**
* 车牌号
*/
@ExcelProperty(value = "车牌号")
private String plateNumber;
/**
* 车辆品牌
*/
@ExcelProperty(value = "车辆品牌")
private String vehicleBrand;
/**
* 车辆类型
*/
@ExcelProperty(value = "车辆类型")
private String vehicleType;
/**
* 车辆颜色
*/
@ExcelProperty(value = "车辆颜色")
private String vehicleColor;
/**
* 座位数
*/
@ExcelProperty(value = "座位数")
private Integer seatCount;
/**
* 燃料类型
*/
@ExcelProperty(value = "燃料类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "veh_vehicle_fuel_type")
private String fuelType;
/**
* 车辆状态
*/
@ExcelProperty(value = "车辆状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "veh_vehicle_status")
private String vehicleStatus;
/**
* 车长(米)
*/
@ExcelProperty(value = "车长", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "米=")
private BigDecimal vehicleLength;
/**
* 车宽(米)
*/
@ExcelProperty(value = "车宽", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "米=")
private BigDecimal vehicleWidth;
/**
* 车高(米)
*/
@ExcelProperty(value = "车高", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "米=")
private BigDecimal vehicleHeight;
/**
* 轴距(米)
*/
@ExcelProperty(value = "轴距", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "米=")
private BigDecimal wheelBase;
/**
* 轮距(米)
*/
@ExcelProperty(value = "轮距", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "米=")
private BigDecimal wheelTrack;
/**
* 车辆性质
*/
@ExcelProperty(value = "车辆性质", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "veh_vehicle_owner_type")
private String ownerType;
/**
* 租赁方信息
*/
@ExcelProperty(value = "租赁方信息")
private String rentalCompany;
/**
* 登记证书编号(车管所登记凭证)
*/
@ExcelProperty(value = "登记证书编号", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "车=管所登记凭证")
private String registrationCertNo;
/**
* 登记日期
*/
@ExcelProperty(value = "登记日期")
private LocalDate registerDate;
/**
* 购置日期
*/
@ExcelProperty(value = "购置日期")
private LocalDate purchaseDate;
/**
* 购置价格
*/
@ExcelProperty(value = "购置价格")
private BigDecimal purchasePrice;
/**
* 保险到期时间
*/
@ExcelProperty(value = "保险到期时间")
private LocalDate insuranceExpiry;
/**
* 年检到期时间
*/
@ExcelProperty(value = "年检到期时间")
private LocalDate inspectionExpiry;
/**
* 附件ID
*/
@ExcelProperty(value = "附件ID")
private String fileIds;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@ -0,0 +1,15 @@
package org.dromara.vehicle.mapper;
import org.dromara.vehicle.domain.VehVehicleInfo;
import org.dromara.vehicle.domain.vo.VehVehicleInfoVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 车辆信息Mapper接口
*
* @author lilemy
* @date 2025-10-25
*/
public interface VehVehicleInfoMapper extends BaseMapperPlus<VehVehicleInfo, VehVehicleInfoVo> {
}

View File

@ -0,0 +1,70 @@
package org.dromara.vehicle.service;
import org.dromara.vehicle.domain.vo.VehVehicleInfoVo;
import org.dromara.vehicle.domain.bo.VehVehicleInfoBo;
import org.dromara.vehicle.domain.VehVehicleInfo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 车辆信息Service接口
*
* @author lilemy
* @date 2025-10-25
*/
public interface IVehVehicleInfoService extends IService<VehVehicleInfo>{
/**
* 查询车辆信息
*
* @param id 主键
* @return 车辆信息
*/
VehVehicleInfoVo queryById(Long id);
/**
* 分页查询车辆信息列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 车辆信息分页列表
*/
TableDataInfo<VehVehicleInfoVo> queryPageList(VehVehicleInfoBo bo, PageQuery pageQuery);
/**
* 查询符合条件的车辆信息列表
*
* @param bo 查询条件
* @return 车辆信息列表
*/
List<VehVehicleInfoVo> queryList(VehVehicleInfoBo bo);
/**
* 新增车辆信息
*
* @param bo 车辆信息
* @return 是否新增成功
*/
Boolean insertByBo(VehVehicleInfoBo bo);
/**
* 修改车辆信息
*
* @param bo 车辆信息
* @return 是否修改成功
*/
Boolean updateByBo(VehVehicleInfoBo bo);
/**
* 校验并批量删除车辆信息信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,151 @@
package org.dromara.vehicle.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.vehicle.domain.VehVehicleInfo;
import org.dromara.vehicle.domain.bo.VehVehicleInfoBo;
import org.dromara.vehicle.domain.vo.VehVehicleInfoVo;
import org.dromara.vehicle.mapper.VehVehicleInfoMapper;
import org.dromara.vehicle.service.IVehVehicleInfoService;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* 车辆信息Service业务层处理
*
* @author lilemy
* @date 2025-10-25
*/
@RequiredArgsConstructor
@Service
public class VehVehicleInfoServiceImpl extends ServiceImpl<VehVehicleInfoMapper, VehVehicleInfo>
implements IVehVehicleInfoService {
/**
* 查询车辆信息
*
* @param id 主键
* @return 车辆信息
*/
@Override
public VehVehicleInfoVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询车辆信息列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 车辆信息分页列表
*/
@Override
public TableDataInfo<VehVehicleInfoVo> queryPageList(VehVehicleInfoBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<VehVehicleInfo> lqw = buildQueryWrapper(bo);
Page<VehVehicleInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的车辆信息列表
*
* @param bo 查询条件
* @return 车辆信息列表
*/
@Override
public List<VehVehicleInfoVo> queryList(VehVehicleInfoBo bo) {
LambdaQueryWrapper<VehVehicleInfo> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<VehVehicleInfo> buildQueryWrapper(VehVehicleInfoBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<VehVehicleInfo> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(VehVehicleInfo::getId);
lqw.eq(bo.getProjectId() != null, VehVehicleInfo::getProjectId, bo.getProjectId());
lqw.eq(StringUtils.isNotBlank(bo.getPlateNumber()), VehVehicleInfo::getPlateNumber, bo.getPlateNumber());
lqw.eq(StringUtils.isNotBlank(bo.getVehicleBrand()), VehVehicleInfo::getVehicleBrand, bo.getVehicleBrand());
lqw.eq(StringUtils.isNotBlank(bo.getVehicleType()), VehVehicleInfo::getVehicleType, bo.getVehicleType());
lqw.eq(StringUtils.isNotBlank(bo.getVehicleColor()), VehVehicleInfo::getVehicleColor, bo.getVehicleColor());
lqw.eq(bo.getSeatCount() != null, VehVehicleInfo::getSeatCount, bo.getSeatCount());
lqw.eq(StringUtils.isNotBlank(bo.getFuelType()), VehVehicleInfo::getFuelType, bo.getFuelType());
lqw.eq(StringUtils.isNotBlank(bo.getVehicleStatus()), VehVehicleInfo::getVehicleStatus, bo.getVehicleStatus());
lqw.eq(bo.getVehicleLength() != null, VehVehicleInfo::getVehicleLength, bo.getVehicleLength());
lqw.eq(bo.getVehicleWidth() != null, VehVehicleInfo::getVehicleWidth, bo.getVehicleWidth());
lqw.eq(bo.getVehicleHeight() != null, VehVehicleInfo::getVehicleHeight, bo.getVehicleHeight());
lqw.eq(bo.getWheelBase() != null, VehVehicleInfo::getWheelBase, bo.getWheelBase());
lqw.eq(bo.getWheelTrack() != null, VehVehicleInfo::getWheelTrack, bo.getWheelTrack());
lqw.eq(StringUtils.isNotBlank(bo.getOwnerType()), VehVehicleInfo::getOwnerType, bo.getOwnerType());
lqw.eq(StringUtils.isNotBlank(bo.getRentalCompany()), VehVehicleInfo::getRentalCompany, bo.getRentalCompany());
lqw.eq(StringUtils.isNotBlank(bo.getRegistrationCertNo()), VehVehicleInfo::getRegistrationCertNo, bo.getRegistrationCertNo());
lqw.eq(bo.getRegisterDate() != null, VehVehicleInfo::getRegisterDate, bo.getRegisterDate());
lqw.eq(bo.getPurchaseDate() != null, VehVehicleInfo::getPurchaseDate, bo.getPurchaseDate());
lqw.eq(bo.getPurchasePrice() != null, VehVehicleInfo::getPurchasePrice, bo.getPurchasePrice());
lqw.eq(bo.getInsuranceExpiry() != null, VehVehicleInfo::getInsuranceExpiry, bo.getInsuranceExpiry());
lqw.eq(bo.getInspectionExpiry() != null, VehVehicleInfo::getInspectionExpiry, bo.getInspectionExpiry());
lqw.eq(StringUtils.isNotBlank(bo.getFileIds()), VehVehicleInfo::getFileIds, bo.getFileIds());
return lqw;
}
/**
* 新增车辆信息
*
* @param bo 车辆信息
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(VehVehicleInfoBo bo) {
VehVehicleInfo add = MapstructUtils.convert(bo, VehVehicleInfo.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改车辆信息
*
* @param bo 车辆信息
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(VehVehicleInfoBo bo) {
VehVehicleInfo update = MapstructUtils.convert(bo, VehVehicleInfo.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(VehVehicleInfo entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除车辆信息信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.vehicle.mapper.VehVehicleInfoMapper">
</mapper>

View File

@ -0,0 +1,114 @@
CREATE TABLE veh_vehicle_info
(
`id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
`project_id` BIGINT NOT NULL COMMENT '项目ID',
`plate_number` VARCHAR(32) NOT NULL COMMENT '车牌号',
`vehicle_brand` VARCHAR(128) NOT NULL COMMENT '车辆品牌',
`vehicle_type` VARCHAR(128) NOT NULL COMMENT '车辆类型',
`vehicle_color` VARCHAR(32) NOT NULL COMMENT '车辆颜色',
`seat_count` INT NOT NULL COMMENT '座位数',
`fuel_type` VARCHAR(32) NOT NULL COMMENT '燃料类型',
`vehicle_status` VARCHAR(32) NOT NULL COMMENT '车辆状态',
`vehicle_length` DECIMAL(10, 2) DEFAULT 0.00 NULL COMMENT '车长(米)',
`vehicle_width` DECIMAL(10, 2) DEFAULT 0.00 NULL COMMENT '车宽(米)',
`vehicle_height` DECIMAL(10, 2) DEFAULT 0.00 NULL COMMENT '车高(米)',
`wheel_base` DECIMAL(10, 2) DEFAULT 0.00 NULL COMMENT '轴距(米)',
`wheel_track` DECIMAL(10, 2) DEFAULT 0.00 NULL COMMENT '轮距(米)',
`owner_type` VARCHAR(16) NOT NULL COMMENT '车辆性质',
`rental_company` VARCHAR(256) NULL COMMENT '租赁方信息',
`registration_cert_no` VARCHAR(128) NULL COMMENT '登记证书编号(车管所登记凭证)',
`register_date` DATE NULL COMMENT '登记日期',
`purchase_date` DATE NULL COMMENT '购置日期',
`purchase_price` DECIMAL(12, 2) DEFAULT 0.00 NULL COMMENT '购置价格',
`insurance_expiry` DATE NULL COMMENT '保险到期时间',
`inspection_expiry` DATE NULL COMMENT '年检到期时间',
`file_ids` VARCHAR(512) NULL COMMENT '附件ID',
`remark` TEXT NULL COMMENT '备注',
`create_by` BIGINT NULL COMMENT '创建者',
`update_by` BIGINT NULL COMMENT '更新者',
`create_dept` BIGINT NULL COMMENT '创建部门',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT '更新时间',
index `idx_project_id` (`project_id`)
) COMMENT ='车辆信息';
-- 菜单 SQL
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible,
status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
values (1981989139020378114, '车辆信息', '1981982566466318337', '1', 'vehicleInfo', 'vehicle/vehicleInfo/index', 1, 0,
'C', '0', '0', 'vehicle:vehicleInfo:list', '#', 103, 1, sysdate(), null, null, '车辆信息菜单');
-- 按钮 SQL
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible,
status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
values (1981989139020378115, '车辆信息查询', 1981989139020378114, '1', '#', '', 1, 0, 'F', '0', '0',
'vehicle:vehicleInfo:query', '#', 103, 1, sysdate(), null, null, '');
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible,
status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
values (1981989139020378116, '车辆信息新增', 1981989139020378114, '2', '#', '', 1, 0, 'F', '0', '0',
'vehicle:vehicleInfo:add', '#', 103, 1, sysdate(), null, null, '');
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible,
status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
values (1981989139020378117, '车辆信息修改', 1981989139020378114, '3', '#', '', 1, 0, 'F', '0', '0',
'vehicle:vehicleInfo:edit', '#', 103, 1, sysdate(), null, null, '');
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible,
status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
values (1981989139020378118, '车辆信息删除', 1981989139020378114, '4', '#', '', 1, 0, 'F', '0', '0',
'vehicle:vehicleInfo:remove', '#', 103, 1, sysdate(), null, null, '');
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible,
status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
values (1981989139020378119, '车辆信息导出', 1981989139020378114, '5', '#', '', 1, 0, 'F', '0', '0',
'vehicle:vehicleInfo:export', '#', 103, 1, sysdate(), null, null, '');
CREATE TABLE veh_vehicle_trip
(
`id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
`project_id` BIGINT NOT NULL COMMENT '项目ID',
`initiator_id` BIGINT NOT NULL COMMENT '发起人',
`vehicle_id` BIGINT NULL COMMENT '车辆ID',
`trip_reason` VARCHAR(512) NOT NULL COMMENT '出行事由',
`start_place` VARCHAR(255) NULL COMMENT '出发地',
`end_place` VARCHAR(255) NOT NULL COMMENT '目的地',
`start_lat` VARCHAR(32) NULL COMMENT '出发地经度',
`start_lng` VARCHAR(32) NULL COMMENT '出发地纬度',
`end_lat` VARCHAR(32) NULL COMMENT '目的地经度',
`end_lng` VARCHAR(32) NULL COMMENT '目的地纬度',
`start_time` DATETIME NOT NULL COMMENT '计划出发时间',
`end_time` DATETIME NULL COMMENT '计划到达时间',
`left_seat` INT DEFAULT 0 NOT NULL COMMENT '剩余座位数',
`is_driver` VARCHAR(2) NOT NULL COMMENT '是否为车主(0不是 1是)',
`trip_status` VARCHAR(2) DEFAULT '0' NOT NULL COMMENT '状态',
`remark` TEXT NULL COMMENT '备注',
`create_by` BIGINT NULL COMMENT '创建者',
`update_by` BIGINT NULL COMMENT '更新者',
`create_dept` BIGINT NULL COMMENT '创建部门',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT '更新时间',
index `idx_project_id` (`project_id`)
) COMMENT ='车辆出行记录';
CREATE TABLE veh_vehicle_apply
(
`id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
`project_id` BIGINT NOT NULL COMMENT '项目ID',
`trip_id` BIGINT NOT NULL COMMENT '关联行程ID',
`passenger_id` BIGINT NOT NULL COMMENT '乘客用户ID',
`passenger_phone` VARCHAR(32) NULL COMMENT '联系电话',
`status` VARCHAR(2) DEFAULT '0' NOT NULL COMMENT '状态( 0申请中 1已确认 2上车 3到达 4取消)',
`boarded` VARCHAR(2) DEFAULT '0' NOT NULL COMMENT '是否确认上车(0否 1是)',
`arrived` VARCHAR(2) DEFAULT '0' NOT NULL COMMENT '是否确认到达(0否 1是)',
`remark` TEXT NULL COMMENT '备注',
`create_by` BIGINT NULL COMMENT '创建者',
`update_by` BIGINT NULL COMMENT '更新者',
`create_dept` BIGINT NULL COMMENT '创建部门',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT '更新时间',
index `idx_project_id` (`project_id`)
) COMMENT ='乘车申请';