src/main/java/com/ruoyi/approve/controller/CarInfoController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,75 @@ package com.ruoyi.approve.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.approve.pojo.CarInfo; import com.ruoyi.approve.pojo.CarInfoRecord; import com.ruoyi.approve.service.CarInfoRecordService; import com.ruoyi.approve.service.CarInfoService; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.AjaxResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import java.util.List; /** * <p> * 车俩管ç å端æ§å¶å¨ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:00:32 */ @RestController @RequestMapping("/carInfo") @Api(tags = "车俩管ç") public class CarInfoController { @Autowired private CarInfoService carInfoService; @Autowired private CarInfoRecordService carInfoRecordService; @ApiOperation("å页æ¥è¯¢è½¦ä¿©ç®¡ç") @GetMapping("/listPage") public AjaxResult listPage(Page page, CarInfo carInfo) { return AjaxResult.success(carInfoService.listPage(page,carInfo)); } @ApiOperation("æ°å¢è½¦ä¿©ç®¡ç") @PostMapping("/add") @Log(title = "车俩管ç", businessType = BusinessType.INSERT) @Transactional(rollbackFor = Exception.class) public AjaxResult add(@RequestBody CarInfo carInfo) { return carInfoService.save(carInfo) ? AjaxResult.success("æ°å¢æå") : AjaxResult.error("æ°å¢å¤±è´¥"); } @ApiOperation("ä¿®æ¹è½¦ä¿©ç®¡ç") @PostMapping("/update") @Log(title = "车俩管ç", businessType = BusinessType.UPDATE) @Transactional(rollbackFor = Exception.class) public AjaxResult update(@RequestBody CarInfo carInfo) { return carInfoService.updateById(carInfo) ? AjaxResult.success("ä¿®æ¹æå") : AjaxResult.error("ä¿®æ¹å¤±è´¥"); } @ApiOperation("å é¤è½¦ä¿©ç®¡ç") @DeleteMapping("/delete") @Log(title = "车俩管ç", businessType = BusinessType.DELETE) @Transactional(rollbackFor = Exception.class) public AjaxResult delete(@RequestBody List<Long> ids) { if(CollectionUtils.isEmpty(ids)) return AjaxResult.error("è¯·éæ©è³å°ä¸æ¡æ°æ®"); carInfoService.removeByIds(ids); carInfoRecordService.remove(new LambdaQueryWrapper<CarInfoRecord>().in(CarInfoRecord::getCarInfoId,ids)); return AjaxResult.success("å 餿å"); } } src/main/java/com/ruoyi/approve/controller/CarInfoRecordController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,71 @@ package com.ruoyi.approve.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.approve.pojo.CarInfoRecord; import com.ruoyi.approve.service.CarInfoRecordService; import com.ruoyi.approve.service.impl.CarInfoServiceImpl; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.AjaxResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import java.util.List; /** * <p> * 车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼ å端æ§å¶å¨ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:01:21 */ @RestController @RequestMapping("/carInfoRecord") @Api(tags = "车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼") public class CarInfoRecordController { @Autowired private CarInfoRecordService carInfoRecordService; @Autowired private CarInfoServiceImpl carInfoService; @GetMapping("/list") @ApiOperation("æ¥è¯¢") public AjaxResult list(Page page, CarInfoRecord carInfoRecord) { return carInfoRecordService.getList(page,carInfoRecord); } @PostMapping("/add") @ApiOperation("ç¨è½¦") @Log(title = "车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼", businessType = BusinessType.INSERT) @Transactional(rollbackFor = Exception.class) public AjaxResult add(@RequestBody CarInfoRecord carInfoRecord) { carInfoService.updateUsageStatus(carInfoRecord.getCarInfoId(),"使ç¨ä¸"); return AjaxResult.success(carInfoRecordService.save(carInfoRecord)); } @PostMapping("/update") @ApiOperation("ä¿®æ¹") @Log(title = "车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼", businessType = BusinessType.UPDATE) public AjaxResult update(@RequestBody CarInfoRecord carInfoRecord) { if(StringUtils.isNotEmpty(carInfoRecord.getUsageStatus())){ carInfoService.updateUsageStatus(carInfoRecord.getCarInfoId(),"空é²"); } return AjaxResult.success(carInfoRecordService.updateById(carInfoRecord)); } @DeleteMapping("/delete") @ApiOperation("å é¤") @Log(title = "车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼", businessType = BusinessType.DELETE) public AjaxResult delete(@RequestBody List<Long> ids) { return AjaxResult.success(carInfoRecordService.removeBatchByIds(ids)); } } src/main/java/com/ruoyi/approve/mapper/CarInfoMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.approve.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.approve.pojo.CarInfo; import org.apache.ibatis.annotations.Mapper; /** * <p> * 车俩管ç Mapper æ¥å£ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:00:32 */ @Mapper public interface CarInfoMapper extends BaseMapper<CarInfo> { } src/main/java/com/ruoyi/approve/mapper/CarInfoRecordMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.approve.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.approve.pojo.CarInfoRecord; import org.apache.ibatis.annotations.Mapper; /** * <p> * 车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼ Mapper æ¥å£ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:01:21 */ @Mapper public interface CarInfoRecordMapper extends BaseMapper<CarInfoRecord> { } src/main/java/com/ruoyi/approve/pojo/CarInfo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,75 @@ package com.ruoyi.approve.pojo; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; import java.time.LocalDateTime; /** * <p> * 车俩管ç * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:00:32 */ @Getter @Setter @TableName("car_info") @ApiModel(value = "CarInfo对象", description = "车俩管ç") public class CarInfo implements Serializable { @TableField(exist = false) @ApiModelProperty("å½å使ç¨äºº") private String currentUserName; @TableField(exist = false) @ApiModelProperty("车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼id") private Long carInfoRecordId; @TableField(exist = false) @ApiModelProperty("表æ¾éç¨") private String odometerMileage; private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty("车çå·") private String carNo; @ApiModelProperty("é¢è²") private String color; @ApiModelProperty("åç") private String brand; @ApiModelProperty("使ç¨ç¶æ") private String usageStatus; @ApiModelProperty("夿³¨") private String remark; @ApiModelProperty("å建æ¶é´") @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime createTime; @ApiModelProperty("å建人") @TableField(fill = FieldFill.INSERT) private Integer createUser; @ApiModelProperty("ä¿®æ¹æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty("ä¿®æ¹äºº") @TableField(fill = FieldFill.INSERT_UPDATE) private Integer updateUser; } src/main/java/com/ruoyi/approve/pojo/CarInfoRecord.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,82 @@ package com.ruoyi.approve.pojo; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.time.LocalDate; import java.time.LocalDateTime; /** * <p> * 车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:01:21 */ @Getter @Setter @TableName("car_info_record") @ApiModel(value = "CarInfoRecord对象", description = "车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼") public class CarInfoRecord implements Serializable { @ApiModelProperty("使ç¨ç¶æ") @TableField(exist = false) private String usageStatus; private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty("车è¾ç®¡çid") private Long carInfoId; @ApiModelProperty("表ç°éç¨") private String odometerMileage; @ApiModelProperty("æ¬æ¬¡é¢è®¡è¡é©¶éç¨") private String thisTripMileage; @ApiModelProperty("ç®çå°") private String destination; @ApiModelProperty("è¿è½¦æ¥æ") @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate carReturnDate; @ApiModelProperty("åè½¦æ¥æ") @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate carRentalDate; @ApiModelProperty("使ç¨äºº") private String userName; @ApiModelProperty("夿³¨") private String remark; @ApiModelProperty("å建æ¶é´") @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; @ApiModelProperty("å建人") @TableField(fill = FieldFill.INSERT) private Integer createUser; @ApiModelProperty("ä¿®æ¹æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty("ä¿®æ¹äºº") @TableField(fill = FieldFill.INSERT_UPDATE) private Integer updateUser; } src/main/java/com/ruoyi/approve/service/CarInfoRecordService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package com.ruoyi.approve.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.approve.pojo.CarInfoRecord; import com.ruoyi.framework.web.domain.AjaxResult; /** * <p> * 车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼ æå¡ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:01:21 */ public interface CarInfoRecordService extends IService<CarInfoRecord> { AjaxResult getList(Page page,CarInfoRecord carInfoRecord); } src/main/java/com/ruoyi/approve/service/CarInfoService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package com.ruoyi.approve.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.approve.pojo.CarInfo; /** * <p> * è½¦ä¿©ç®¡ç æå¡ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:00:32 */ public interface CarInfoService extends IService<CarInfo> { IPage<CarInfo> listPage(Page page, CarInfo carInfo); } src/main/java/com/ruoyi/approve/service/impl/CarInfoRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,38 @@ package com.ruoyi.approve.service.impl; 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.ruoyi.approve.mapper.CarInfoRecordMapper; import com.ruoyi.approve.pojo.CarInfoRecord; import com.ruoyi.approve.service.CarInfoRecordService; import com.ruoyi.framework.web.domain.AjaxResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * <p> * 车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼ æå¡å®ç°ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:01:21 */ @Service public class CarInfoRecordServiceImpl extends ServiceImpl<CarInfoRecordMapper, CarInfoRecord> implements CarInfoRecordService { @Autowired private CarInfoRecordMapper carInfoRecordMapper; @Override public AjaxResult getList(Page page,CarInfoRecord carInfoRecord) { LambdaQueryWrapper<CarInfoRecord> carInfoRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); if(carInfoRecord != null){ if(carInfoRecord.getCarInfoId() != null){ carInfoRecordLambdaQueryWrapper.eq(CarInfoRecord::getCarInfoId, carInfoRecord.getCarInfoId()); } } carInfoRecordLambdaQueryWrapper.orderByDesc(CarInfoRecord::getCreateTime); return AjaxResult.success(carInfoRecordMapper.selectPage(page,carInfoRecordLambdaQueryWrapper)); } } src/main/java/com/ruoyi/approve/service/impl/CarInfoServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,85 @@ package com.ruoyi.approve.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.approve.mapper.CarInfoMapper; import com.ruoyi.approve.mapper.CarInfoRecordMapper; import com.ruoyi.approve.pojo.CarInfo; import com.ruoyi.approve.pojo.CarInfoRecord; import com.ruoyi.approve.service.CarInfoService; import com.ruoyi.common.utils.StringUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * <p> * è½¦ä¿©ç®¡ç æå¡å®ç°ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:00:32 */ @Service @Slf4j public class CarInfoServiceImpl extends ServiceImpl<CarInfoMapper, CarInfo> implements CarInfoService { @Autowired private CarInfoMapper carInfoMapper; @Autowired private CarInfoRecordMapper carInfoRecordMapper; /** * æ¹å车è¾ä½¿ç¨ç¶æ * @param id */ public void updateUsageStatus(Long id, String usageStatus) { CarInfo carInfo = carInfoMapper.selectOne(new LambdaQueryWrapper<CarInfo>() .eq(CarInfo::getId, id) .last("limit 1")); if(carInfo == null) throw new RuntimeException("车è¾ä¸åå¨"); if("使ç¨ä¸".equals(usageStatus) && "使ç¨ä¸".equals(carInfo.getUsageStatus())) throw new RuntimeException("车è¾å·²ä½¿ç¨ä¸"); carInfo.setUsageStatus(usageStatus); carInfoMapper.updateById(carInfo); } @Override public IPage<CarInfo> listPage(Page page, CarInfo carInfo) { LambdaQueryWrapper<CarInfo> carInfoLambdaQueryWrapper = new LambdaQueryWrapper<>(); if(carInfo != null){ if(StringUtils.isNotEmpty(carInfo.getCarNo())){ carInfoLambdaQueryWrapper.like(CarInfo::getCarNo,carInfo.getCarNo()); } if(StringUtils.isNotEmpty(carInfo.getBrand())){ carInfoLambdaQueryWrapper.like(CarInfo::getBrand,carInfo.getBrand()); } if(StringUtils.isNotEmpty(carInfo.getColor())){ carInfoLambdaQueryWrapper.like(CarInfo::getColor,carInfo.getColor()); } if(StringUtils.isNotEmpty(carInfo.getUsageStatus())){ carInfoLambdaQueryWrapper.like(CarInfo::getUsageStatus,carInfo.getUsageStatus()); } } carInfoLambdaQueryWrapper.orderByDesc(CarInfo::getCreateTime); Page<CarInfo> page1 = carInfoMapper.selectPage(page, carInfoLambdaQueryWrapper); for (CarInfo record : page1.getRecords()) { // å½å使ç¨äººï¼è¡¨æ¾éç¨ CarInfoRecord carInfoRecord = carInfoRecordMapper.selectOne(new LambdaQueryWrapper<CarInfoRecord>() .eq(CarInfoRecord::getCarInfoId, record.getId()) .orderByDesc(CarInfoRecord::getCreateTime) .last("limit 1")); if(carInfoRecord != null){ record.setCarInfoRecordId(carInfoRecord.getId()); record.setOdometerMileage(carInfoRecord.getOdometerMileage()); if("使ç¨ä¸".equals(record.getUsageStatus())){ record.setCurrentUserName(carInfoRecord.getUserName()); } } } return page1; } } src/main/resources/mapper/approve/CarInfoMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ <?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.ruoyi.approve.mapper.CarInfoMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.approve.pojo.CarInfo"> <id column="id" property="id" /> <result column="car_no" property="carNo" /> <result column="color" property="color" /> <result column="status" property="status" /> <result column="brand" property="brand" /> <result column="usage_status" property="usageStatus" /> <result column="borrowing_date" property="borrowingDate" /> <result column="desc" property="desc" /> <result column="odometer_mileage" property="odometerMileage" /> <result column="this_trip_mileage" property="thisTripMileage" /> <result column="remark" property="remark" /> <result column="create_time" property="createTime" /> <result column="create_user" property="createUser" /> <result column="update_time" property="updateTime" /> <result column="update_user" property="updateUser" /> </resultMap> </mapper> src/main/resources/mapper/approve/CarInfoRecordMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ <?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.ruoyi.approve.mapper.CarInfoRecordMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.approve.pojo.CarInfoRecord"> <id column="id" property="id" /> <result column="car_info_id" property="carInfoId" /> <result column="odometer_mileage" property="odometerMileage" /> <result column="car_return_date" property="carReturnDate" /> <result column="user_name" property="userName" /> <result column="remark" property="remark" /> <result column="create_time" property="createTime" /> <result column="create_user" property="createUser" /> <result column="update_time" property="updateTime" /> <result column="update_user" property="updateUser" /> </resultMap> </mapper>