feat:增加汽车事件模块

This commit is contained in:
2026-07-20 23:17:40 +08:00
parent 69df40a47d
commit a70fe6c9ef
17 changed files with 304 additions and 16 deletions

View File

@@ -0,0 +1,49 @@
package com.cxx.home.controller;
import com.cxx.common.ReadView;
import com.cxx.common.WriteView;
import com.cxx.home.dto.CarEventDto;
import com.cxx.home.service.CarEventService;
import com.cxx.home.vo.CarQueryVo;
import com.fasterxml.jackson.annotation.JsonView;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/car")
@Tag(name = "汽车事件")
public class CarEventController {
@Resource
private CarEventService carEventService;
@Operation(summary = "新增汽车事件")
@PostMapping("")
public Boolean addCarEvent(@RequestBody @JsonView(WriteView.class) @Validated CarEventDto dto) {
return carEventService.addCarEvent(dto);
}
@Operation(summary = "更新汽车事件")
@PutMapping("/{id}")
public Boolean updateCarEvent(@PathVariable("id") long id,
@RequestBody @JsonView(WriteView.class) @Validated CarEventDto dto) {
return carEventService.updateCarEvent(id, dto);
}
@Operation(summary = "删除汽车事件")
@DeleteMapping("/{id}")
public Boolean deleteCarEvent(@PathVariable("id") long id) {
return carEventService.deleteCarEvent(id);
}
@Operation(summary = "查询所有汽车事件")
@GetMapping("")
public @JsonView(ReadView.class) List<CarEventDto> queryCarEventList(CarQueryVo query) {
return carEventService.queryCarEventList(query);
}
}

View File

@@ -0,0 +1,18 @@
package com.cxx.home.converter;
import com.cxx.home.dto.CarEventDto;
import com.cxx.home.entity.CarEvent;
import org.mapstruct.Mapper;
import java.util.List;
@Mapper(componentModel = "spring")
public interface CarEventConverter {
CarEvent toEntity(CarEventDto dto);
List<CarEvent> toEntities(List<CarEventDto> dto);
CarEventDto toDto(CarEvent entities);
List<CarEventDto> toDtos(List<CarEvent> entities);
}

View File

@@ -0,0 +1,13 @@
package com.cxx.home.dao;
import com.cxx.home.dto.CarEventDto;
import com.cxx.home.vo.CarQueryVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface CarEventDao {
List<CarEventDto> queryCarEventList(@Param("query") CarQueryVo queryVo);
}

View File

@@ -0,0 +1,53 @@
package com.cxx.home.dto;
import com.cxx.common.PlainView;
import com.cxx.common.ReadView;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonView;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.PositiveOrZero;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDate;
@Getter
@Setter
@JsonView(PlainView.class)
public class CarEventDto {
@Schema(description = "id")
@JsonView(ReadView.class)
private Long id;
@Schema(description = "名称")
@NotBlank(message = "汽车名称不能为空")
private String name;
@Schema(description = "类型")
private String type;
@Schema(description = "日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private LocalDate date;
@Schema(description = "当前里程")
@PositiveOrZero(message = "里程必须大于等于0")
private Integer mileage;
@Schema(description = "cost")
@PositiveOrZero(message = "花费必须大于等于0")
private Integer cost;
@Schema(description = "地点")
private String location;
@Schema(description = "描述")
private String description;
@Schema(description = "图片路径")
private String imageUrl;
@Schema(description = "备注")
private String remark;
}

View File

@@ -0,0 +1,41 @@
package com.cxx.home.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.cxx.framework.data.AbstractEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDate;
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("car_event")
public class CarEvent extends AbstractEntity {
@TableField(value = "name")
private String name;
@TableField("type")
private String type;
@TableField("date")
private LocalDate date;
@TableField("mileage")
private Integer mileage;
@TableField("cost")
private Integer cost;
@TableField("location")
private String location;
@TableField("description")
private String description;
@TableField("image_url")
private String imageUrl;
@TableField("remark")
private String remark;
}

View File

@@ -0,0 +1,9 @@
package com.cxx.home.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.cxx.home.entity.CarEvent;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface CarEventMapper extends BaseMapper<CarEvent> {
}

View File

@@ -0,0 +1,17 @@
package com.cxx.home.service;
import com.cxx.home.dto.CarEventDto;
import com.cxx.home.vo.CarQueryVo;
import java.util.List;
public interface CarEventService {
Boolean addCarEvent(CarEventDto dto);
Boolean updateCarEvent(Long id, CarEventDto dto);
Boolean deleteCarEvent(Long id);
List<CarEventDto> queryCarEventList(CarQueryVo query);
}

View File

@@ -7,9 +7,9 @@ import com.cxx.home.vo.ProductQueryVo;
import java.util.List;
public interface ProductService {
Boolean addProduct(ProductDto productDto);
Boolean addProduct(ProductDto dto);
Boolean updateProduct(Long id, ProductDto productDto);
Boolean updateProduct(Long id, ProductDto dto);
Boolean deleteProduct(Long id);

View File

@@ -0,0 +1,56 @@
package com.cxx.home.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.cxx.home.converter.CarEventConverter;
import com.cxx.home.dao.CarEventDao;
import com.cxx.home.dto.CarEventDto;
import com.cxx.home.entity.CarEvent;
import com.cxx.home.mapper.CarEventMapper;
import com.cxx.home.service.CarEventService;
import com.cxx.home.vo.CarQueryVo;
import jakarta.annotation.Resource;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
public class CarEventServiceImpl implements CarEventService {
@Resource
private CarEventMapper carEventMapper;
@Resource
private CarEventConverter carEventConverter;
@Resource
private CarEventDao carEventDao;
@Override
@Transactional
public Boolean addCarEvent(CarEventDto dto) {
CarEvent carEvent = new CarEvent();
BeanUtils.copyProperties(dto, carEvent);
return carEventMapper.insert(carEvent) == 1;
}
@Override
@Transactional
public Boolean updateCarEvent(Long id, CarEventDto dto) {
CarEvent carEvent = new CarEvent();
BeanUtils.copyProperties(dto, carEvent);
carEvent.setId(id);
return carEventMapper.updateById(carEvent) == 1;
}
@Override
@Transactional
public Boolean deleteCarEvent(Long id) {
return carEventMapper.deleteById(id) == 1;
}
@Override
public List<CarEventDto> queryCarEventList(CarQueryVo query) {
return carEventDao.queryCarEventList(query);
}
}

View File

@@ -1,4 +1,3 @@
package com.cxx.home.vo;
import io.swagger.v3.oas.annotations.media.Schema;

View File

@@ -0,0 +1,12 @@
package com.cxx.home.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class CarQueryVo {
@Schema(description = "事件类别")
private String type;
}

View File

@@ -1,4 +1,3 @@
package com.cxx.home.vo;
import io.swagger.v3.oas.annotations.media.Schema;

View File

@@ -1,4 +1,3 @@
package com.cxx.home.vo;
import io.swagger.v3.oas.annotations.media.Schema;

View File

@@ -1,4 +1,3 @@
package com.cxx.home.vo;
import io.swagger.v3.oas.annotations.media.Schema;

View File

@@ -1,4 +1,3 @@
package com.cxx.home.vo;
import io.swagger.v3.oas.annotations.media.Schema;

View File

@@ -0,0 +1,25 @@
<?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="com.cxx.home.dao.CarEventDao">
<select id="queryCarEventList" resultType="com.cxx.home.dto.CarEventDto">
SELECT
id AS id,
name AS name,
type AS type,
date AS date,
mileage AS mileage,
cost AS cost,
location AS location,
description AS description,
image_url AS imageUrl,
remark AS remark
FROM
car_event
<where>
<if test="query.type != null and query.type != ''">
type = #{query.type}
</if>
</where>
ORDER BY date DESC
</select>
</mapper>