Переглянути джерело

iaw 车辆信息变更申请

master
chenchaod 1 день тому
джерело
коміт
0a172e2254

+ 5
- 8
zhywpt-app-iaw/src/main/java/cn/com/taiji/iaw/api/ass/VehicleChangeController.java Переглянути файл

@@ -5,10 +5,7 @@ import cn.com.taiji.common.web.ApiResponse;
import cn.com.taiji.iaw.api.MyValidController;
import cn.com.taiji.iaw.dto.ass.sign.ResignCheckResDTO;
import cn.com.taiji.iaw.dto.ass.sign.ResignResponseDTO;
import cn.com.taiji.iaw.dto.ass.vehicleChange.VehicleChangeApplyReqDTO;
import cn.com.taiji.iaw.dto.ass.vehicleChange.VehicleChangeSignReqDTO;
import cn.com.taiji.iaw.dto.ass.vehicleChange.VehicleChangeViewReqDTO;
import cn.com.taiji.iaw.dto.ass.vehicleChange.VehicleChangeViewResDTO;
import cn.com.taiji.iaw.dto.ass.vehicleChange.*;
import cn.com.taiji.iaw.manager.ass.VehicleChangeManger;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -35,9 +32,9 @@ public class VehicleChangeController extends MyValidController {

@ApiOperation("申请")
@PostMapping("/apply")
public ApiResponse<Void> page(@Valid @RequestBody VehicleChangeApplyReqDTO dto) throws ManagerException {
manager.apply(dto);
return ApiResponse.success();
public ApiResponse<VehicleChangeApplyResDTO> page(@Valid @RequestBody VehicleChangeApplyReqDTO dto) throws ManagerException {
VehicleChangeApplyResDTO resDTO = manager.apply(dto);
return ApiResponse.of(resDTO);
}
// @ApiOperation("详情")
// @PostMapping("/detail")
@@ -45,7 +42,7 @@ public class VehicleChangeController extends MyValidController {
// return ApiResponse.of(manager.rePage(dto));
// }

@ApiOperation("审核查询")
@ApiOperation("审核查询-APP")
@PostMapping("/beforeReview")
public ApiResponse<VehicleChangeViewResDTO> page(@Valid @RequestBody VehicleChangeViewReqDTO dto) throws ManagerException {
VehicleChangeViewResDTO resDTO = manager.beforeReview(dto);

+ 190
- 0
zhywpt-app-iaw/src/main/java/cn/com/taiji/iaw/dto/ass/vehicleChange/VehicleChangeApplyReqDTO.java Переглянути файл

@@ -1,8 +1,18 @@
package cn.com.taiji.iaw.dto.ass.vehicleChange;

import cn.com.taiji.common.pub.validation.PatternFactory;
import cn.com.taiji.common.valid.ViolationValidator;
import cn.com.taiji.core.dto.AbstractBizRequestDTO;
import cn.com.taiji.core.entity.dict.basic.*;
import cn.com.taiji.core.model.comm.protocol.constraint.EnumInteger;
import cn.com.taiji.core.model.comm.protocol.constraint.IntegerConstant;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

/**
* @Author:ChenChao
@@ -13,4 +23,184 @@ import lombok.Data;
@Data
@ApiModel(description = "车辆信息变更申请请求")
public class VehicleChangeApplyReqDTO extends AbstractBizRequestDTO {
private String staffId;
private String openId;
// @NotBlank
// private String agencyId;
// @NotBlank
// private String channelId;
// @Enumerated(EnumType.STRING)
// @NotBlank
// private SourceType orderSource;
@NotBlank
@ApiModelProperty(value = "旧车牌号+颜色", required = true)
private String oldVehicleId;// 旧车牌号+颜色
@NotBlank
@ApiModelProperty(value = "车牌号", required = true)
private String vehiclePlate;// 车牌号
@NotNull
@EnumInteger(enumClazz = PlateColorType.class)
@ApiModelProperty(value = "车牌颜色", required = true)
private Integer vehiclePlateColor;// 车牌颜色
@NotBlank
@ApiModelProperty(value = "行驶证主页图片地址", required = true)
private String vehPosImgUrl;// 行驶证主页照片
@NotBlank
@ApiModelProperty(value = "行驶证副页图片地址", required = true)
private String vehNegImgUrl;// 行驶证副页照片
@NotBlank
@ApiModelProperty(value = "行驶证姓名", required = true)
private String vehicleName;//行驶证姓名
@NotNull
@EnumInteger(enumClazz = UseUserType.class)
@ApiModelProperty(value = "车辆使用类型", required = true)
private Integer useUserType;//车辆使用类型
@NotNull
@IntegerConstant(values = "1,2,3")
@ApiModelProperty(value = "客货类型 1客车 2货车 3专项作业;用户选择", required = true)
private Integer vanType;// 客货类型 1客车 2货车 3专项作业
@NotBlank
@ApiModelProperty(value = "vin码", required = true)
private String vin;// vin码
@NotBlank
@ApiModelProperty(value = "发动机编号", required = true)
private String engineNum;// 发动机编号
@NotBlank
@ApiModelProperty(value = "车辆类型", required = true)
private String vehicleType;// 行驶证车辆类型
@NotBlank
@ApiModelProperty(value = "车辆品牌", required = true)
private String vehicleModel;// 行驶证车辆品牌
@NotNull
@ApiModelProperty(value = "核定载人数", required = true)
private Integer approvedCount;// 核定载人数
@NotNull
@ApiModelProperty(value = "总质量", required = true)
private Integer totalMass;// 总质量
@ApiModelProperty(value = "整备质量")
private Integer maintenaceMass;// 整备质量
@ApiModelProperty(value = "核定载质量")
private Integer permittedWeight;// 核定载质量
@ApiModelProperty(value = "准牵引总质量")
private Integer permittedTowWeight;// 准牵引总质量
@NotBlank
@ApiModelProperty(value = "车辆尺寸", required = true)
private String vehicleDimensions;// 车辆尺寸
@Min(value = 2)
@NotNull
@ApiModelProperty(value = "车轴数", required = true)
private Integer axleCount;// 车轴数
@NotBlank
@ApiModelProperty(value = "发证日期", required = true)
private String issueDate;// 发证日期
@ApiModelProperty(value = "道路运输证号码")
private String transportIdNum;// 道路运输证编号
@ApiModelProperty(value = "经营许可证编号")
private String licenseIdNum;// 经营许可证编号
@NotBlank
@ApiModelProperty(value = "车身45°照片", required = true)
private String vehBodyUrl;// 车身45°照片
@ApiModelProperty(value = "道路运输许可证图片地址")
private String roadTransportPermitPicUrl;// 道路运输许可证图片地址
@NotNull
@EnumInteger(enumClazz = VehicleUseCharacter.class)
@ApiModelProperty(value = "车辆使用性质", required = true)
private Integer character;//车辆使用性质;
@NotBlank
@ApiModelProperty(value = "注册日期", required = true)
private String registerDate;// 注册日期
@IntegerConstant(values = "0,1")
@ApiModelProperty(value = "应急车辆标识")
private Integer emergencyFlag;// 应急车辆标识 0-非应急车辆 1-应急车辆
@NotNull
@EnumInteger(enumClazz = VehicleType.class)
@ApiModelProperty(value = "收费车型", required = true)
private Integer feeVehicleType;//收费车型 后端自己计算
//===================办理人信息================================
@NotBlank
@Pattern(regexp = "^1[3-9][0-9]{9}$", message = "手机号格式错误")
@ApiModelProperty(value = "申请人手机号", required = true)
private String mobile;//手机号
@NotNull
@EnumInteger(enumClazz = IdType.class)
@ApiModelProperty(value = "申请人证件类型", required = true)
private Integer userIdType;//证件类型(申请人)
@NotBlank
@ApiModelProperty(value = "申请人姓名", required = true)
private String name;//身份证OCR姓名
@NotBlank
@Pattern(regexp = PatternFactory.idCodeRegexp, message = "身份证格式错误")
@ApiModelProperty(value = "申请人证件号码", required = true)
private String userIdNum;//证件号码
@NotBlank
@ApiModelProperty(value = "申请人身份证人像图片地址", required = true)
private String userPosImagesUrl;//身份证人像图片地址
@NotBlank
@ApiModelProperty(value = "申请人身份证国徽图片地址", required = true)
private String userNegImagesUrl;//身份证国徽图片地址
@ApiModelProperty(value = "申请人地址")
private String userAdress;//地址

//========================车主信息===========================
@EnumInteger(enumClazz = IdType.class, message = "用户证件类型不合规")
@ApiModelProperty(value = "车主证件类型,不需要上传车主信息,不要传值")
private Integer ownerIdType;// 车主证件类型
@ApiModelProperty(value = "车主证件号码")
private String ownerIdNum;// 车主证件号码
@ApiModelProperty(value = "车主证件ocr地址")
private String ownerIdAddress;// 车主证件ocr地址
@ApiModelProperty(value = "车主证件正面图片地址")
private String ownerPosImgUrl;//车主证件正面照片地址
@ApiModelProperty(value = "车主证件反面图片地址,单位的填不上,个人必填")
private String ownerNegImgUrl;//车主证件反面照片地址, 单位的填不上,个人必填
@ApiModelProperty(value = "车主手机号,单位的填不上,个人必填")
private String ownerTel;//车主手机号,单位的填不上,个人必填
@ApiModelProperty(value = "车主身份证上姓名")
private String ownerName;//身份证上姓名
@ApiModelProperty(value = "委托书图片地址")
private String proxyUrl;// 委托书地址

@Override
protected void validate(ViolationValidator validator) {
if (SourceType.SERVICE_HALL.equals(getOrderSource())) {
validator.validFieldNotBlank("staffId", staffId);
}
if (vehicleDimensions.contains("X") || vehicleDimensions.contains("x") || vehicleDimensions.contains("×")
|| vehicleDimensions.contains("*")) {
try {
Integer.valueOf(vehicleDimensions.split("[Xx×*]")[0]);
} catch (Exception e) {
validator.validField("vehicleDimensionsError", true,
String.format("车辆车辆外廓尺寸参数不合规,无法计算收费车型_[%s]", vehicleDimensions));
}
}else {
validator.validField("vehicleDimensionsError", true,
String.format("车辆车辆外廓尺寸参数不合规,无法计算收费车型_[%s]", vehicleDimensions));
}
// 货车必填字段
if (vanType != 1) {
validator.validFieldNotNull("totalMass", totalMass);
validator.validFieldNotNull("maintenaceMass", maintenaceMass);
validator.validFieldNotNull("permittedWeight", permittedWeight);
// validator.validFieldNotNull("permittedTowWeight", permittedTowWeight);//20250304修改,不是所有的货车都有准牵引总质量,所以去掉校验
validator.validFieldNotNull("axleCount", axleCount);
}
// 牵引车必填字段
if (useUserType != 0) {
validator.validFieldNotBlank("roadTransportPermitPicUrl", roadTransportPermitPicUrl);
validator.validFieldNotBlank("licenseIdNum",licenseIdNum);
}
if (ownerIdType != null){
//有车主信息
validator.validFieldNotBlank("ownerName",ownerName);
validator.validFieldNotBlank("ownerIdNum",ownerIdNum);
validator.validFieldNotBlank("ownerIdAddress",ownerIdAddress);
validator.validFieldNotBlank("ownerPosImgUrl",ownerPosImgUrl);
if (ownerIdType != null && IdType.SFZ.getCode()== ownerIdType){
validator.validFieldNotBlank("ownerNegImgUrl",ownerNegImgUrl);// 单位的填不上,个人必填
validator.validFieldNotBlank("ownerTel",ownerTel);
}
}
}

}

+ 18
- 0
zhywpt-app-iaw/src/main/java/cn/com/taiji/iaw/dto/ass/vehicleChange/VehicleChangeApplyResDTO.java Переглянути файл

@@ -0,0 +1,18 @@
package cn.com.taiji.iaw.dto.ass.vehicleChange;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/**
* @Author:ChenChao
* @Date:2025/9/6 17:35
* @Filename:VehicleChangeApplyResDTO
* @description:
*/
@ApiModel(description = "车辆信息变更申请响应")
@Data
public class VehicleChangeApplyResDTO {
@ApiModelProperty(value = "上传车主身份标识,1需要,2不需要")
private Integer flag;
}

+ 2
- 5
zhywpt-app-iaw/src/main/java/cn/com/taiji/iaw/manager/ass/VehicleChangeManger.java Переглянути файл

@@ -3,10 +3,7 @@ package cn.com.taiji.iaw.manager.ass;
import cn.com.taiji.common.manager.ManagerException;
import cn.com.taiji.iaw.dto.ass.sign.ResignCheckResDTO;
import cn.com.taiji.iaw.dto.ass.sign.ResignResponseDTO;
import cn.com.taiji.iaw.dto.ass.vehicleChange.VehicleChangeApplyReqDTO;
import cn.com.taiji.iaw.dto.ass.vehicleChange.VehicleChangeSignReqDTO;
import cn.com.taiji.iaw.dto.ass.vehicleChange.VehicleChangeViewReqDTO;
import cn.com.taiji.iaw.dto.ass.vehicleChange.VehicleChangeViewResDTO;
import cn.com.taiji.iaw.dto.ass.vehicleChange.*;

/**
* @Author:ChenChao
@@ -21,5 +18,5 @@ public interface VehicleChangeManger {

ResignResponseDTO sign(VehicleChangeSignReqDTO dto) throws ManagerException;

void apply(VehicleChangeApplyReqDTO dto);
VehicleChangeApplyResDTO apply(VehicleChangeApplyReqDTO dto) throws ManagerException;
}

+ 34
- 6
zhywpt-app-iaw/src/main/java/cn/com/taiji/iaw/manager/ass/VehicleChangeMangerImpl.java Переглянути файл

@@ -10,8 +10,13 @@ import cn.com.taiji.core.entity.basic.QtkVehicleInfo;
import cn.com.taiji.core.entity.dict.ass.AssOrderStatus;
import cn.com.taiji.core.entity.dict.ass.AssOrderStep;
import cn.com.taiji.core.entity.dict.ass.AssOrderType;
import cn.com.taiji.core.entity.dict.basic.SourceType;
import cn.com.taiji.core.entity.dict.log.OperateType;
import cn.com.taiji.core.entity.user.AccountInfo;
import cn.com.taiji.core.entity.user.Staff;
import cn.com.taiji.core.model.comm.protocol.ias.ass.ResignRequest;
import cn.com.taiji.core.model.comm.protocol.ias.ass.VehicleChangeApllyRequest;
import cn.com.taiji.core.model.comm.protocol.ias.ass.VehicleChangeAplyResponse;
import cn.com.taiji.core.model.comm.protocol.ias.order.SignQueryResponse;
import cn.com.taiji.core.repo.jpa.ass.AssAgencyConfigRepo;
import cn.com.taiji.core.repo.jpa.ass.AssDeviceUpgradeRepo;
@@ -19,12 +24,10 @@ import cn.com.taiji.core.repo.jpa.ass.AssOrderinfoRepo;
import cn.com.taiji.core.repo.jpa.ass.AssVehicleInfoChangeRepo;
import cn.com.taiji.core.repo.jpa.basic.QtkCardInfoRepo;
import cn.com.taiji.core.repo.jpa.basic.QtkVehicleInfoRepo;
import cn.com.taiji.core.repo.jpa.user.StaffRepo;
import cn.com.taiji.iaw.dto.ass.sign.ResignCheckResDTO;
import cn.com.taiji.iaw.dto.ass.sign.ResignResponseDTO;
import cn.com.taiji.iaw.dto.ass.vehicleChange.VehicleChangeApplyReqDTO;
import cn.com.taiji.iaw.dto.ass.vehicleChange.VehicleChangeSignReqDTO;
import cn.com.taiji.iaw.dto.ass.vehicleChange.VehicleChangeViewReqDTO;
import cn.com.taiji.iaw.dto.ass.vehicleChange.VehicleChangeViewResDTO;
import cn.com.taiji.iaw.dto.ass.vehicleChange.*;
import cn.com.taiji.iaw.manager.AbstractIawManager;
import cn.com.taiji.iaw.model.ass.releasePlate.ApplyInfo;
import cn.com.taiji.iaw.model.ass.releasePlate.DrivingInfo;
@@ -53,10 +56,35 @@ public class VehicleChangeMangerImpl extends AbstractIawManager implements Vehic
private AssAgencyConfigRepo assAgencyConfigRepo;
@Autowired
private AssDeviceUpgradeRepo assDeviceUpgradeRepo;
@Autowired
private StaffRepo staffRepo;

@Override
public void apply(VehicleChangeApplyReqDTO dto) {

public VehicleChangeApplyResDTO apply(VehicleChangeApplyReqDTO req) throws ManagerException {
req.validate();
VehicleChangeApplyResDTO responseDTO = new VehicleChangeApplyResDTO();
if (!req.getVehicleName().equals(req.getName()) && req.getOwnerIdType() == null){
responseDTO.setFlag(1);
return responseDTO;
}
VehicleChangeApllyRequest request = copyProperties(req, new VehicleChangeApllyRequest());
request.setOrderSource(req.getOrderSource());
String openId = findOpenIdByToken(req.getAccessToken());
request.setOpenId(openId);
if (SourceType.ALI == req.getOrderSource() || SourceType.WECHAT == req.getOrderSource()){
// 自营工具 和 管理端
request.setAgencyId("52001106004");//// 黔通智联(自营)
request.setChannelId("5201010600401150002");//// 黔通智联售后服务
}
if (SourceType.SERVICE_HALL == req.getOrderSource()){
Staff staff = staffRepo.findByStaffId(req.getStaffId());
request.setAgencyId(staff.getAgencyId());
request.setChannelId(staff.getServiceHallId());
}
VehicleChangeAplyResponse response = jsonPostRepeat(request);
sysPersistOperateLog(OperateType.CHANGE_VEHICLE_APPLY, response.getId(), req.getOrderSource(), openId,"车辆信息变更申请");
responseDTO.setFlag(2);
return responseDTO;
}

@Override

Завантаження…
Відмінити
Зберегти