From cc23a308c181ac7ae055b71ee90ee01a3400a26f Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Sat, 25 Oct 2025 17:01:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=85=8D=E7=BD=AE=EF=BC=8C?= =?UTF-8?q?=E8=BD=A6=E8=BE=86=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-local.yml | 4 +- .../job/once/FullSyncYs7DeviceData.java | 45 ----- .../impl/PgsProgressPlanServiceImpl.java | 6 + .../controller/VehVehicleInfoController.java | 106 ++++++++++ .../vehicle/domain/VehVehicleInfo.java | 148 ++++++++++++++ .../vehicle/domain/bo/VehVehicleInfoBo.java | 158 +++++++++++++++ .../vehicle/domain/vo/VehVehicleInfoVo.java | 187 ++++++++++++++++++ .../vehicle/mapper/VehVehicleInfoMapper.java | 15 ++ .../service/IVehVehicleInfoService.java | 70 +++++++ .../impl/VehVehicleInfoServiceImpl.java | 151 ++++++++++++++ .../mapper/vehicle/VehVehicleInfoMapper.xml | 7 + xinnengyuan/script/sql/vehicle.sql | 114 +++++++++++ 12 files changed, 964 insertions(+), 47 deletions(-) delete mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/once/FullSyncYs7DeviceData.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/controller/VehVehicleInfoController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/VehVehicleInfo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/bo/VehVehicleInfoBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/vo/VehVehicleInfoVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/mapper/VehVehicleInfoMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/IVehVehicleInfoService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/impl/VehVehicleInfoServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/vehicle/VehVehicleInfoMapper.xml create mode 100644 xinnengyuan/script/sql/vehicle.sql diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application-local.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application-local.yml index b7e53be8..4106a417 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application-local.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application-local.yml @@ -321,8 +321,8 @@ ys7: app-key: xxx app-secret: xxx job: - capture-enabled: true # 控制是否启用萤石抓拍任务 - device-sync-enabled: true # 控制是否同步萤石设备 + capture-enabled: false # 控制是否启用萤石抓拍任务 + device-sync-enabled: false # 控制是否同步萤石设备 # 斯巴达算法 sparta: url: http://119.3.204.120:8040 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/once/FullSyncYs7DeviceData.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/once/FullSyncYs7DeviceData.java deleted file mode 100644 index 0743e31e..00000000 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/once/FullSyncYs7DeviceData.java +++ /dev/null @@ -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 ys7QueryDeviceList = ys7Manager.queryAllDeviceList(); - Boolean result = ys7DeviceService.saveOrUpdateByDeviceList(ys7QueryDeviceList); - if (result) { - log.info("摄像头设备数据同步成功"); - } else { - log.info("没有需要同步的设备"); - } - } catch (Exception e) { - log.info("摄像头设备数据同步失败", e); - } - - } -} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanServiceImpl.java index e1cce7b7..35a643d4 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanServiceImpl.java @@ -162,6 +162,12 @@ public class PgsProgressPlanServiceImpl extends ServiceImpl detailList = req.getDetailList(); 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 newDetailList = detailList.stream().map(detail -> { PgsProgressPlanDetail progressPlanDetail = new PgsProgressPlanDetail(); BeanUtils.copyProperties(detail, progressPlanDetail); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/controller/VehVehicleInfoController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/controller/VehVehicleInfoController.java new file mode 100644 index 00000000..4640bbbd --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/controller/VehVehicleInfoController.java @@ -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 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 list = vehVehicleInfoService.queryList(bo); + ExcelUtil.exportExcel(list, "车辆信息", VehVehicleInfoVo.class, response); + } + + /** + * 获取车辆信息详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("vehicle:vehicleInfo:query") + @GetMapping("/{id}") + public R 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 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 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 remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(vehVehicleInfoService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/VehVehicleInfo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/VehVehicleInfo.java new file mode 100644 index 00000000..63c7443b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/VehVehicleInfo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/bo/VehVehicleInfoBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/bo/VehVehicleInfoBo.java new file mode 100644 index 00000000..97af27be --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/bo/VehVehicleInfoBo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/vo/VehVehicleInfoVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/vo/VehVehicleInfoVo.java new file mode 100644 index 00000000..b051b332 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/domain/vo/VehVehicleInfoVo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/mapper/VehVehicleInfoMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/mapper/VehVehicleInfoMapper.java new file mode 100644 index 00000000..b78dff22 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/mapper/VehVehicleInfoMapper.java @@ -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 { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/IVehVehicleInfoService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/IVehVehicleInfoService.java new file mode 100644 index 00000000..0fe249ec --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/IVehVehicleInfoService.java @@ -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{ + + /** + * 查询车辆信息 + * + * @param id 主键 + * @return 车辆信息 + */ + VehVehicleInfoVo queryById(Long id); + + /** + * 分页查询车辆信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 车辆信息分页列表 + */ + TableDataInfo queryPageList(VehVehicleInfoBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的车辆信息列表 + * + * @param bo 查询条件 + * @return 车辆信息列表 + */ + List 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 ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/impl/VehVehicleInfoServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/impl/VehVehicleInfoServiceImpl.java new file mode 100644 index 00000000..a0afd577 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/vehicle/service/impl/VehVehicleInfoServiceImpl.java @@ -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 + implements IVehVehicleInfoService { + + /** + * 查询车辆信息 + * + * @param id 主键 + * @return 车辆信息 + */ + @Override + public VehVehicleInfoVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询车辆信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 车辆信息分页列表 + */ + @Override + public TableDataInfo queryPageList(VehVehicleInfoBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的车辆信息列表 + * + * @param bo 查询条件 + * @return 车辆信息列表 + */ + @Override + public List queryList(VehVehicleInfoBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(VehVehicleInfoBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper 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 ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/vehicle/VehVehicleInfoMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/vehicle/VehVehicleInfoMapper.xml new file mode 100644 index 00000000..70f605d1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/vehicle/VehVehicleInfoMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/script/sql/vehicle.sql b/xinnengyuan/script/sql/vehicle.sql new file mode 100644 index 00000000..a5a5bd12 --- /dev/null +++ b/xinnengyuan/script/sql/vehicle.sql @@ -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 ='乘车申请'; +