增加车辆报损
This commit is contained in:
@ -3,13 +3,11 @@ package com.sczx.car.controller;
|
||||
|
||||
import com.sczx.car.common.Result;
|
||||
import com.sczx.car.dto.CarDTO;
|
||||
import com.sczx.car.dto.RentCarRuleDTO;
|
||||
import com.sczx.car.dto.CarDamageReq;
|
||||
import com.sczx.car.dto.req.CarQueryConditionReq;
|
||||
import com.sczx.car.service.CarService;
|
||||
import com.sczx.car.service.RentCarRuleService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@ -42,4 +40,11 @@ public class CarController {
|
||||
public Result<Long> countCarByStoreId(@RequestParam(name = "storeId") Long storeId){
|
||||
return Result.ok(carService.countCarByStoreId(storeId));
|
||||
}
|
||||
|
||||
@ApiOperation(value = "车辆报损")
|
||||
@PostMapping("/carDamage")
|
||||
public Result<Boolean> carDamage(@RequestBody CarDamageReq req){
|
||||
carService.carDamage(req);
|
||||
return Result.ok(true);
|
||||
}
|
||||
}
|
||||
|
||||
19
src/main/java/com/sczx/car/dto/CarDamageReq.java
Normal file
19
src/main/java/com/sczx/car/dto/CarDamageReq.java
Normal file
@ -0,0 +1,19 @@
|
||||
package com.sczx.car.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@ApiModel(value = "车辆报损请求", description = "车辆报损请求")
|
||||
@Data
|
||||
public class CarDamageReq {
|
||||
@ApiModelProperty("关联车辆ID,外键关联zc_car表")
|
||||
private Long carId;
|
||||
|
||||
@ApiModelProperty("报损类型")
|
||||
private String damageType;
|
||||
|
||||
@ApiModelProperty("报损原因")
|
||||
private String damageReason;
|
||||
|
||||
}
|
||||
38
src/main/java/com/sczx/car/dto/SimpleUserInfoDTO.java
Normal file
38
src/main/java/com/sczx/car/dto/SimpleUserInfoDTO.java
Normal file
@ -0,0 +1,38 @@
|
||||
package com.sczx.car.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@ApiModel(value = "基本用户信息")
|
||||
@Data
|
||||
public class SimpleUserInfoDTO {
|
||||
|
||||
@ApiModelProperty(value = "用户id")
|
||||
private Integer userId;
|
||||
|
||||
@ApiModelProperty(value = "用户姓名")
|
||||
private String userName;
|
||||
|
||||
@ApiModelProperty(value = "手机号")
|
||||
private String phoneNumber;
|
||||
|
||||
@ApiModelProperty(value = "角色id")
|
||||
private Integer roleId;
|
||||
|
||||
@ApiModelProperty(value = "小程序类型")
|
||||
private String miniProgramType;
|
||||
|
||||
@ApiModelProperty("头像")
|
||||
private String avatarUrl;
|
||||
|
||||
@ApiModelProperty("微信小程序 openid")
|
||||
private String wechatOpenid;
|
||||
|
||||
@ApiModelProperty("支付宝小程序 userid")
|
||||
private String alipayUserid;
|
||||
|
||||
@ApiModelProperty("是否认证0未认证1已认证")
|
||||
private Integer authed;
|
||||
|
||||
}
|
||||
16
src/main/java/com/sczx/car/mapper/CarDamageMapper.java
Normal file
16
src/main/java/com/sczx/car/mapper/CarDamageMapper.java
Normal file
@ -0,0 +1,16 @@
|
||||
package com.sczx.car.mapper;
|
||||
|
||||
import com.sczx.car.po.CarDamagePO;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 车辆报损记录表 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author zhangli
|
||||
* @since 2025-08-24 15:40:46
|
||||
*/
|
||||
public interface CarDamageMapper extends BaseMapper<CarDamagePO> {
|
||||
|
||||
}
|
||||
91
src/main/java/com/sczx/car/po/CarDamagePO.java
Normal file
91
src/main/java/com/sczx/car/po/CarDamagePO.java
Normal file
@ -0,0 +1,91 @@
|
||||
package com.sczx.car.po;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 车辆报损记录表
|
||||
* </p>
|
||||
*
|
||||
* @author zhangli
|
||||
* @since 2025-08-24 15:40:46
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@TableName("zc_car_damage")
|
||||
@ApiModel(value = "CarDamagePO对象", description = "车辆报损记录表")
|
||||
public class CarDamagePO implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty("报损记录ID")
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("关联车辆ID,外键关联zc_car表")
|
||||
private Long carId;
|
||||
|
||||
@ApiModelProperty("报损类型")
|
||||
private String damageType;
|
||||
|
||||
@ApiModelProperty("报损原因")
|
||||
private String damageReason;
|
||||
|
||||
@ApiModelProperty("报损提交人姓名")
|
||||
private String submitterName;
|
||||
|
||||
@ApiModelProperty("报损提交时间")
|
||||
private LocalDateTime submitTime;
|
||||
|
||||
@ApiModelProperty("报损状态(0:待审核,1:审核通过,2:审核不通过,3:已处理)")
|
||||
private Integer damageStatus;
|
||||
|
||||
@ApiModelProperty("审核人姓名")
|
||||
private String auditorName;
|
||||
|
||||
@ApiModelProperty("审核时间")
|
||||
private LocalDateTime auditTime;
|
||||
|
||||
@ApiModelProperty("审核意见")
|
||||
private String auditComment;
|
||||
|
||||
@ApiModelProperty("状态(0正常 1停用)")
|
||||
private String status;
|
||||
|
||||
@ApiModelProperty("删除标志(0代表存在 2代表删除)")
|
||||
private String delFlag;
|
||||
|
||||
@ApiModelProperty("创建者")
|
||||
private String createBy;
|
||||
|
||||
@ApiModelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@ApiModelProperty("更新者")
|
||||
private String updateBy;
|
||||
|
||||
@ApiModelProperty("更新时间")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
@ApiModelProperty("备注信息")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty("扩展字段1")
|
||||
private String extend1;
|
||||
|
||||
@ApiModelProperty("扩展字段2")
|
||||
private String extend2;
|
||||
|
||||
@ApiModelProperty("扩展字段3")
|
||||
private String extend3;
|
||||
|
||||
|
||||
}
|
||||
16
src/main/java/com/sczx/car/repository/CarDamageRepo.java
Normal file
16
src/main/java/com/sczx/car/repository/CarDamageRepo.java
Normal file
@ -0,0 +1,16 @@
|
||||
package com.sczx.car.repository;
|
||||
|
||||
import com.sczx.car.po.CarDamagePO;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 车辆报损记录表 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author zhangli
|
||||
* @since 2025-08-24 15:40:46
|
||||
*/
|
||||
public interface CarDamageRepo extends IService<CarDamagePO> {
|
||||
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
package com.sczx.car.repository.impl;
|
||||
|
||||
import com.sczx.car.po.CarDamagePO;
|
||||
import com.sczx.car.mapper.CarDamageMapper;
|
||||
import com.sczx.car.repository.CarDamageRepo;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 车辆报损记录表 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author zhangli
|
||||
* @since 2025-08-24 15:40:46
|
||||
*/
|
||||
@Service
|
||||
public class CarDamageRepoImpl extends ServiceImpl<CarDamageMapper, CarDamagePO> implements CarDamageRepo {
|
||||
|
||||
}
|
||||
@ -1,8 +1,8 @@
|
||||
package com.sczx.car.service;
|
||||
|
||||
import com.sczx.car.dto.CarDTO;
|
||||
import com.sczx.car.dto.CarDamageReq;
|
||||
import com.sczx.car.dto.req.CarQueryConditionReq;
|
||||
import com.sczx.car.po.CarPO;
|
||||
|
||||
/**
|
||||
* @Author: 张黎
|
||||
@ -23,4 +23,10 @@ public interface CarService {
|
||||
* @return
|
||||
*/
|
||||
Long countCarByStoreId(Long storeId);
|
||||
|
||||
/**
|
||||
* 车辆报损
|
||||
* @param req
|
||||
*/
|
||||
void carDamage(CarDamageReq req);
|
||||
}
|
||||
|
||||
@ -3,14 +3,21 @@ package com.sczx.car.service.impl;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.sczx.car.convert.CarConvert;
|
||||
import com.sczx.car.dto.CarDTO;
|
||||
import com.sczx.car.dto.CarDamageReq;
|
||||
import com.sczx.car.dto.SimpleUserInfoDTO;
|
||||
import com.sczx.car.dto.req.CarQueryConditionReq;
|
||||
import com.sczx.car.exception.BizException;
|
||||
import com.sczx.car.po.CarDamagePO;
|
||||
import com.sczx.car.po.CarPO;
|
||||
import com.sczx.car.repository.CarDamageRepo;
|
||||
import com.sczx.car.repository.CarRepo;
|
||||
import com.sczx.car.service.CarService;
|
||||
import com.sczx.car.util.JwtUtil;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
@ -23,6 +30,12 @@ public class CarServiceImpl implements CarService {
|
||||
|
||||
@Autowired
|
||||
private CarRepo carRepo;
|
||||
|
||||
@Autowired
|
||||
private CarDamageRepo carDamageRepo;
|
||||
|
||||
@Autowired
|
||||
private JwtUtil jwtUtil;
|
||||
@Override
|
||||
public CarDTO getCarByCondition(CarQueryConditionReq req) {
|
||||
LambdaQueryWrapper<CarPO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
@ -40,4 +53,20 @@ public class CarServiceImpl implements CarService {
|
||||
public Long countCarByStoreId(Long storeId) {
|
||||
return carRepo.count(new LambdaQueryWrapper<CarPO>().eq(CarPO::getStoreId, storeId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void carDamage(CarDamageReq req) {
|
||||
SimpleUserInfoDTO userInfoDTO = jwtUtil.getUserInfoFromToken();
|
||||
CarPO carPO = carRepo.getById(req.getCarId());
|
||||
if (carPO == null) {
|
||||
throw new BizException("车辆不存在");
|
||||
}
|
||||
CarDamagePO carDamagePO = new CarDamagePO();
|
||||
carDamagePO.setCarId(req.getCarId());
|
||||
carDamagePO.setDamageType(req.getDamageType());
|
||||
carDamagePO.setDamageReason(req.getDamageReason());
|
||||
carDamagePO.setSubmitterName(userInfoDTO.getUserName());
|
||||
carDamagePO.setSubmitTime(LocalDateTime.now());
|
||||
carDamageRepo.save(carDamagePO);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
package com.sczx.car.util;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.sczx.car.dto.SimpleUserInfoDTO;
|
||||
import io.jsonwebtoken.JwtException;
|
||||
import io.jsonwebtoken.Jwts;
|
||||
import io.jsonwebtoken.SignatureAlgorithm;
|
||||
@ -7,9 +10,13 @@ import io.jsonwebtoken.security.Keys;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
import javax.crypto.SecretKey;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author: 张黎
|
||||
@ -30,16 +37,38 @@ public class JwtUtil {
|
||||
// this.key = Keys.secretKeyFor(SignatureAlgorithm.HS512);
|
||||
log.info("JWT 密钥:{}", secretKey);
|
||||
}
|
||||
|
||||
public String generateToken(String username, String role) {
|
||||
// 支持自定义 claims 的 generateToken 方法
|
||||
public String generateToken(SimpleUserInfoDTO simpleUserInfoDTO, String subject){
|
||||
Map<String, Object> claims = Maps.newHashMap();
|
||||
claims.put("userInfo", simpleUserInfoDTO.getUserId());
|
||||
return Jwts.builder()
|
||||
.setSubject(username)
|
||||
.claim("role", role)
|
||||
.setClaims(claims) // 设置自定义 claims
|
||||
.setSubject(subject)
|
||||
.setExpiration(new Date(System.currentTimeMillis() + expiration))
|
||||
.signWith(key, SignatureAlgorithm.HS512)
|
||||
.compact();
|
||||
}
|
||||
|
||||
// 从 token 中提取某个字段
|
||||
public <T> T getClaim(String token, String claimKey, Class<T> clazz) {
|
||||
return Jwts.parserBuilder()
|
||||
.setSigningKey(key)
|
||||
.build()
|
||||
.parseClaimsJws(token)
|
||||
.getBody()
|
||||
.get(claimKey, clazz);
|
||||
}
|
||||
|
||||
// 从 token 中提取某个对象类型的字段(支持复杂对象)
|
||||
public <T> T getClaimFromToken(String token, String claimKey, Class<T> targetClass) {
|
||||
return Jwts.parserBuilder()
|
||||
.setSigningKey(key)
|
||||
.build()
|
||||
.parseClaimsJws(token)
|
||||
.getBody()
|
||||
.get(claimKey, targetClass);
|
||||
}
|
||||
|
||||
public String extractUsername(String token) {
|
||||
return Jwts.parserBuilder()
|
||||
.setSigningKey(key)
|
||||
@ -60,4 +89,35 @@ public class JwtUtil {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public HttpServletRequest getCurrentRequest() {
|
||||
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
||||
return attributes != null ? attributes.getRequest() : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前请求的Authorization头内容
|
||||
* @return Authorization头的值,如果不存在则返回null
|
||||
*/
|
||||
public String getAuthorizationHeader() {
|
||||
HttpServletRequest request = getCurrentRequest();
|
||||
return request != null ? request.getHeader("Authorization") : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 从token中获取用户信息
|
||||
* @return 用户信息
|
||||
*/
|
||||
public SimpleUserInfoDTO getUserInfoFromToken() {
|
||||
String authHeader = getAuthorizationHeader();
|
||||
log.info("token:{}",authHeader);
|
||||
if (authHeader != null && authHeader.startsWith("Bearer ")) {
|
||||
String token = authHeader.substring(7);
|
||||
String userInfoJson = getClaim(token, "userInfo", String.class);
|
||||
// 进行token验证等操作
|
||||
return JSONObject.parseObject(userInfoJson, SimpleUserInfoDTO.class);
|
||||
}else {
|
||||
throw new RuntimeException("token不存在");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
5
src/main/resources/mapper/CarDamageMapper.xml
Normal file
5
src/main/resources/mapper/CarDamageMapper.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<?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.sczx.car.mapper.CarDamageMapper">
|
||||
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user