浏览代码

卡签恢复使用-用户新增

master
zouhantao 3 天前
父节点
当前提交
e4b85c1c10

+ 8
- 0
gly-base-core/src/main/java/cn/com/taiji/core/repo/jpa/ass/AssDeviceResumeRepo.java 查看文件

@@ -0,0 +1,8 @@
package cn.com.taiji.core.repo.jpa.ass;

import cn.com.taiji.common.repo.jpa.AbstractJpaRepo;
import cn.com.taiji.core.entity.ass.AssDeviceResume;

public interface AssDeviceResumeRepo extends AbstractJpaRepo<AssDeviceResume, String> {

}

+ 35
- 0
zhywpt-app-iaw/src/main/java/cn/com/taiji/iaw/api/ass/DeviceResumeController.java 查看文件

@@ -0,0 +1,35 @@
package cn.com.taiji.iaw.api.ass;

import javax.validation.Valid;

import cn.com.taiji.iaw.dto.ass.DeviceResumeAddRequestDTO;
import cn.com.taiji.iaw.dto.ass.DeviceResumeResponseDTO;
import cn.com.taiji.iaw.manager.ass.DeviceResumeManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import cn.com.taiji.common.manager.ManagerException;
import cn.com.taiji.common.web.ApiResponse;
import cn.com.taiji.iaw.api.MyValidController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

@Api(tags = {"卡签恢复使用"})
@RestController
@RequestMapping("/deviceResume")
public class DeviceResumeController extends MyValidController {
@Autowired
private DeviceResumeManager manager;

@ApiOperation(value = "新增")
@PostMapping(value = "/add")
public ApiResponse<DeviceResumeResponseDTO> queryVehicle(@Valid @RequestBody DeviceResumeAddRequestDTO reqDto) throws ManagerException {
DeviceResumeResponseDTO resDto = manager.add(reqDto);
return ApiResponse.of(resDto).setMessage("操作成功");
}


}

+ 92
- 0
zhywpt-app-iaw/src/main/java/cn/com/taiji/iaw/dto/ass/DeviceResumeAddRequestDTO.java 查看文件

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

import cn.com.taiji.core.entity.dict.basic.IdType;
import org.springframework.validation.annotation.Validated;

import cn.com.taiji.core.dto.AbstractBizRequestDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import javax.persistence.Column;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;

@ApiModel(description = "车辆解挂申请")
@Getter
@Setter
@Accessors(chain = true)
@Validated
public class DeviceResumeAddRequestDTO extends AbstractBizRequestDTO {

@NotBlank
@ApiModelProperty(value = "卡号")
private String cardId;
@NotBlank
@ApiModelProperty(value = "签号")
private String obuId;
@NotBlank
@ApiModelProperty(value = "用户姓名")
private String customerName;// 用户姓名
@NotBlank
@ApiModelProperty(value = "身份证号")
private String customerIdNum;// 身份证号
@NotBlank
@ApiModelProperty(value = "客户手机号")
private String customerTel;//客户手机号
@NotBlank
@ApiModelProperty(value = "行驶证车辆类型")
private String cardVehicleType;// 行驶证车辆类型
@NotBlank
@ApiModelProperty(value = "车牌号码")
private String vehiclePlate;// 车牌号码
@NotNull
@ApiModelProperty(value = "车牌颜色")
private Integer vehiclePlateColor;// 车牌颜色
@NotNull
@ApiModelProperty(value = "原卡过期时间")
private LocalDateTime oldCardExpireTime;//原卡过期时间;
@NotNull
@ApiModelProperty(value = "原签过期时间")
private LocalDateTime oldObuExpireTime;//原签过期时间;
@NotBlank
@ApiModelProperty(value = "用户证件正面地址")
private String customerPosUrl;//用户证件正面地址
@NotBlank
@ApiModelProperty(value = "用户证件反面地址")
private String customerNegUrl;//用户证件反面地址
@NotBlank
@ApiModelProperty(value = "行驶证正面图片地址")
private String vehPosImgUrl;//行驶证正面图片地址
@NotBlank
@ApiModelProperty(value = "行驶证反面图片地址")
private String vehNegImgUrl;//行驶证反面图片地址
@ApiModelProperty(value = "指定经办人姓名")
private String agentName;//指定经办人姓名
@ApiModelProperty(value = "指定经办人证件类型")
private IdType agentIdtype;//指定经办人证件类型
@ApiModelProperty(value = "指定经办人证件号码")
private String agentIdNum;//指定经办人证件号码
@ApiModelProperty(value = "委托书照片")
private String proxyUrl;//委托书照片
@ApiModelProperty(value = "经办人正面照片")
private String agentPosImgUrl;//经办人正面照片
@ApiModelProperty(value = "经办人反面照片")
private String agentNegImgUrl;//经办人反面照片
@NotBlank
@ApiModelProperty(value = "微信openId")
private String wxOpenId;// 微信openId

private Integer vanType;// 车型
private Integer approvedCount;// 核定载人数
private Integer axleCount;// 轴数
private Integer totalMass;// 总质量
private String vehicleDimensions;// 外廓尺寸

}

+ 18
- 0
zhywpt-app-iaw/src/main/java/cn/com/taiji/iaw/dto/ass/DeviceResumeResponseDTO.java 查看文件

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

import cn.com.taiji.common.model.BaseModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

@ApiModel(description = "车辆解挂申请返回")
@Getter
@Setter
@Accessors(chain = true)
public class DeviceResumeResponseDTO extends BaseModel {
@ApiModelProperty(value = "id")
private String id;

}

+ 11
- 0
zhywpt-app-iaw/src/main/java/cn/com/taiji/iaw/manager/ass/DeviceResumeManager.java 查看文件

@@ -0,0 +1,11 @@
package cn.com.taiji.iaw.manager.ass;

import cn.com.taiji.common.manager.ManagerException;
import cn.com.taiji.iaw.dto.ass.DeviceResumeAddRequestDTO;
import cn.com.taiji.iaw.dto.ass.DeviceResumeResponseDTO;

public interface DeviceResumeManager {

// 新增
DeviceResumeResponseDTO add(DeviceResumeAddRequestDTO reqDto) throws ManagerException;
}

+ 166
- 0
zhywpt-app-iaw/src/main/java/cn/com/taiji/iaw/manager/ass/DeviceResumeManagerImpl.java 查看文件

@@ -0,0 +1,166 @@
package cn.com.taiji.iaw.manager.ass;

import cn.com.taiji.common.manager.ManagerException;
import cn.com.taiji.common.manager.net.http.ServiceHandleException;
import cn.com.taiji.common.pub.BeanTools;
import cn.com.taiji.core.entity.ass.AssDeviceResume;
import cn.com.taiji.core.entity.ass.AssOrderinfo;
import cn.com.taiji.core.entity.basic.QtkCardInfo;
import cn.com.taiji.core.entity.basic.QtkCustomerInfo;
import cn.com.taiji.core.entity.basic.QtkObuInfo;
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.CardStatus;
import cn.com.taiji.core.entity.dict.basic.CardType;
import cn.com.taiji.core.entity.dict.basic.ObuStatus;
import cn.com.taiji.core.entity.dict.basic.VehicleType;
import cn.com.taiji.core.manager.tools.issue.IssueTools;
import cn.com.taiji.core.model.comm.protocol.ias.ass.ResignRequest;
import cn.com.taiji.core.model.comm.protocol.ias.order.SignQueryResponse;
import cn.com.taiji.core.repo.jpa.ass.AssDeviceResumeRepo;
import cn.com.taiji.core.repo.jpa.ass.AssOrderinfoRepo;
import cn.com.taiji.core.repo.jpa.basic.QtkCardInfoRepo;
import cn.com.taiji.core.repo.jpa.basic.QtkCustomerInfoRepo;
import cn.com.taiji.core.repo.jpa.basic.QtkObuInfoRepo;
import cn.com.taiji.core.repo.jpa.basic.QtkVehicleInfoRepo;
import cn.com.taiji.iaw.dto.ass.DeviceResumeAddRequestDTO;
import cn.com.taiji.iaw.dto.ass.DeviceResumeResponseDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cn.com.taiji.iaw.manager.AbstractCommManager;

import java.time.LocalDateTime;

/**
* 卡签恢复使用相关功能
*/
@Service
public class DeviceResumeManagerImpl extends AbstractCommManager implements DeviceResumeManager {

@Autowired
private AssDeviceResumeRepo deviceResumeRepo;
@Autowired
private AssOrderinfoRepo orderinfoRepo;
@Autowired
private QtkCardInfoRepo cardInfoRepo;
@Autowired
private QtkObuInfoRepo obuInfoRepo;
@Autowired
private QtkCustomerInfoRepo customerInfoRepo;
@Autowired
private QtkVehicleInfoRepo vehicleInfoRepo;

@Override
public DeviceResumeResponseDTO add(DeviceResumeAddRequestDTO reqDto) throws ManagerException {
// 审核是否能新增
checkDeviceResume(reqDto);
// 保存售后订单
AssOrderinfo orderinfo = saveOrderInfo(reqDto);
// 保存审核记录
AssDeviceResume deviceResume = saveDeviceResume(reqDto,orderinfo);
DeviceResumeResponseDTO responseDTO = new DeviceResumeResponseDTO();
responseDTO.setId(deviceResume.getId());
return responseDTO;
}

public void checkDeviceResume(DeviceResumeAddRequestDTO reqDto) throws ManagerException {
// 1、判断卡签状态为有卡挂起和无卡挂起状态可以申请解除挂起。
QtkCardInfo cardInfo = cardInfoRepo.findByCardId(reqDto.getCardId());
if (cardInfo == null) {
throw new ManagerException("未查到卡信息,不允许解挂!");
}
QtkObuInfo obuInfo = obuInfoRepo.findByObuId(reqDto.getObuId());
if (obuInfo == null) {
throw new ManagerException("未查到签信息,不允许解挂!");
}
if (cardInfo.getCardStatus() != CardStatus.YKGQ && cardInfo.getCardStatus() != CardStatus.WKGQ) {
throw new ManagerException("卡号状态不是有卡挂起或无卡挂起状态,不允许解挂!");
}
// 2、判断卡签信息中的用户编号和车辆编号是否存在用户数据和车辆数据,不存在不允许解挂。
QtkCustomerInfo customerInfo = customerInfoRepo.findByCustomerId(cardInfo.getCustomerId());
if (customerInfo == null) {
throw new ManagerException("未查到用户信息,不允许解挂!");
}
QtkVehicleInfo vehicleInfo = vehicleInfoRepo.findByVehicleId(cardInfo.getVehicleId());
if (vehicleInfo == null) {
throw new ManagerException("未查到车辆信息,不允许解挂!");
}
// 3、判断卡签信息中的车辆编号,判断车辆数据中的用户编号和卡签信息中的车辆编号是否一致,不一致,不允许解挂。
if (!cardInfo.getVehicleId().equals(vehicleInfo.getVehicleId())
||!obuInfo.getVehicleId().equals(vehicleInfo.getVehicleId())) {
throw new ManagerException("车辆编号不一致,不允许解挂!");
}
if (!vehicleInfo.getCustomerId().equals(customerInfo.getCustomerId())
|| !cardInfo.getCustomerId().equals(customerInfo.getCustomerId())
|| !obuInfo.getCustomerId().equals(customerInfo.getCustomerId())) {
throw new ManagerException("车辆用户信息与卡签用户信息不一致,不允许解挂!");
}
// 4、判断上传的车辆资料,通过上传资料计算车型,当车型发生变更时,不允许进行解挂。
Integer vehicleClass = IssueTools.getVehicleClass(reqDto.getVanType(), reqDto.getVehicleDimensions(),
reqDto.getApprovedCount(), reqDto.getAxleCount(), reqDto.getTotalMass());
VehicleType vehicleType = VehicleType.fromCode(vehicleClass);
if (vehicleInfo.getType() != vehicleType.getCode()){
throw new ManagerException("车辆类型发生变更,不允许进行解挂!");
}
// 5、进行车牌校验,判断车牌占用情况,有则不允许解挂。
QtkObuInfo zcObuInfo = obuInfoRepo.findByVehicleIdAndObuStatus(vehicleInfo.getVehicleId(), ObuStatus.ZC);
QtkCardInfo zcCardInfo = cardInfoRepo.findByVehicleIdAndCardStatus(vehicleInfo.getVehicleId());
if (zcObuInfo != null || zcCardInfo != null){
throw new ManagerException("车牌已占用,不允许进行解挂!");
}
// 6、判断用户原签约关系是否正常,不正常不允许解挂。"
ResignRequest resignRequest = new ResignRequest();
resignRequest.setWxOpenId(reqDto.getWxOpenId());
resignRequest.setProductId(cardInfo.getPackageId());
resignRequest.setVehicleId(cardInfo.getVehicleId());
resignRequest.setName(reqDto.getCustomerName());
resignRequest.setIdNum(reqDto.getCustomerIdNum());
resignRequest.setFlag(1);
SignQueryResponse response = jsonPostRepeat(resignRequest);
if (response.getUserState().equals("OPENED")
|| !response.getUserState().equals("UNAUTHORIZED")){
return;
}else{
throw new ManagerException("用户原签约关系异常,不允许进行解挂!");
}
}

public AssOrderinfo saveOrderInfo(DeviceResumeAddRequestDTO reqDto) throws ServiceHandleException {
QtkCardInfo cardInfo = cardInfoRepo.findByCardId(reqDto.getCardId());
QtkCustomerInfo customerInfo = customerInfoRepo.findByCustomerId(cardInfo.getCustomerId());
AssOrderinfo orderinfo = new AssOrderinfo();
BeanTools.copyProperties(reqDto, orderinfo);
orderinfo.setOrderType(AssOrderType.DEVICE_RESUME);
orderinfo.setOrderSource(reqDto.getOrderSource());
orderinfo.setAgencyId(cardInfo.getAgencyId());
orderinfo.setChannelId(cardInfo.getChannelId());
orderinfo.setOrderStatus(AssOrderStatus.NORMAL);
orderinfo.setOrderStep(AssOrderStep.WAITING_AUDIT);
orderinfo.setApplyTime(LocalDateTime.now());
orderinfo.setOpenId(findOpenIdByToken(reqDto.getAccessToken()));
orderinfo.setCustomerId(cardInfo.getCustomerId());
orderinfo.setCustomerName(reqDto.getCustomerName());
orderinfo.setCustomerTel(reqDto.getCustomerTel());
orderinfo.setUserType(customerInfo.getUserType());
orderinfo.setArtificialStatus(0);
orderinfo.setVehicleId(cardInfo.getVehicleId());
orderinfo.setVehiclePlate(reqDto.getVehiclePlate());
orderinfo.setVehiclePlateColor(reqDto.getVehiclePlateColor());
orderinfo.setCardId(cardInfo.getCardId());
orderinfo.setCardType(CardType.fromCode(cardInfo.getCardType()));
orderinfo.setObuId(reqDto.getObuId());
return orderinfoRepo.save(orderinfo);
}

public AssDeviceResume saveDeviceResume(DeviceResumeAddRequestDTO reqDto, AssOrderinfo orderinfo){
AssDeviceResume deviceResume = new AssDeviceResume();
BeanTools.copyProperties(reqDto, deviceResume);
deviceResume.setOrderNo(orderinfo.getOrderNo());
deviceResume.setInsertTime(LocalDateTime.now());
return deviceResumeRepo.save(deviceResume);
}

}

+ 3
- 0
zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/ass/AssOrderCancelManager.java 查看文件

@@ -98,7 +98,10 @@ public class AssOrderCancelManager extends AbstractAssManager<AssOrderCancelRequ
break;
case RELEASE_VEHICLE://解除车牌占用
break;
case DEVICE_RESUME://车辆解挂
break;
//TODO

default:
throw GlyServiceError.FORMAT_VALIDATE_ERR.toHandleException("订单类型未定义");
}

正在加载...
取消
保存