Commit d10cea1c by 牟邦恺

调整驾驶证信息

parent 3a9b199e
......@@ -17,15 +17,16 @@ import com.hikcreate.edl.pub.web.mobile.infra.data.feign.edl_pvt_service_driving
import com.hikcreate.edl.pub.web.mobile.infra.model.param.request.DrivingLicenseSendSmsCodeReq;
import com.hikcreate.edl.pub.web.mobile.infra.model.param.request.DrivingLicenseValidReq;
import com.hikcreate.edl.pub.web.mobile.infra.model.param.request.DrivingLicenseValidSmsCodeReq;
import com.hikcreate.edl.pub.web.mobile.infra.model.param.request.IdCardReq;
import com.hikcreate.edl.pub.web.mobile.infra.model.param.request.UserIdReq;
import com.hikcreate.edl.pub.web.mobile.infra.model.param.response.DrivingLicenseInfoRes;
import com.hikcreate.edl.pub.web.mobile.infra.model.param.response.DrivingLicenseValidRes;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
......@@ -74,9 +75,16 @@ public class DrivingLicenseController {
return ResultGenerator.success();
}
@GetMapping("/image")
public void image(@RequestParam("idCard") String idCard, HttpServletResponse response) {
DrivingLicenseMicRes drivingLicenseMicRes = drivingLicenseFeign.getByIdCard(new CreditIdCardMicReq().setIdCard(idCard)).fallback().getData();
@PostMapping("/drivingLicenseInfo")
@HeaderDecryptAnnotation
public Result<DrivingLicenseInfoRes> getDrivingLicenseInfo(@RequestBody @Validated UserIdReq req) {
DrivingLicenseInfoRes drivingLicenseInfoRes = drivingLicenseService.getDrivingLicenseInfo(req.getUserId());
return ResultGenerator.success(drivingLicenseInfoRes);
}
@PostMapping("/image")
public void image(@RequestBody @Validated IdCardReq req, HttpServletResponse response) {
DrivingLicenseMicRes drivingLicenseMicRes = drivingLicenseFeign.getByIdCard(new CreditIdCardMicReq().setIdCard(req.getIdCard())).fallback().getData();
DlImageDO dlImageDO = new DlImageDO();
dlImageDO.setAddress(drivingLicenseMicRes.getAddress());
dlImageDO.setBelowLicenseNumber(drivingLicenseMicRes.getIdCard());
......@@ -98,7 +106,7 @@ public class DrivingLicenseController {
setHeader(response, drivingLicenseMicRes.getIdCard() + ".jpg");
response.getOutputStream().write(outputStream.toByteArray());
} catch (Exception e) {
log.error("Get dl img E, idCard={}, msg={}", idCard, e);
log.error("Get dl img E, idCard={}, msg={}", req.getIdCard(), e);
getResException(response, "获取驾照图片异常");
} finally {
try {
......
......@@ -184,6 +184,8 @@ public class H5Controller {
verifyInfo.setPhone(req.getPhone());
verifyInfo.setPassTime(DateTime.now());
verifyInfoMapper.insert(verifyInfo);
// 保存验证信息到redis
service.saveValid(req.getUserId(), req.getUnqId(), req.getPhone());
}
return checkResult;
}
......
package com.hikcreate.edl.pub.web.mobile.domain;
import com.hikcreate.edl.pub.web.mobile.infra.model.param.response.DrivingLicenseInfoRes;
import com.hikcreate.edl.pub.web.mobile.infra.model.param.response.DrivingLicenseValidRes;
/**
......@@ -13,4 +14,6 @@ public interface DrivingLicenseService {
void sendSmsCode(String userId);
void validSmsCode(String userId, String smsCode);
DrivingLicenseInfoRes getDrivingLicenseInfo(String userId);
}
......@@ -98,4 +98,19 @@ public interface IBindService extends IService<ParkBindInfo> {
*/
Result<VehicleDrivingLicenseInfoRes> drivingLicenseInfo(H5BindInfoQuery query);
/**
* 保存校验信息
* @param userId
* @param unqId
* @param phone
*/
void saveValid(String userId, String unqId, String phone);
/**
* 验证是否通过短信校验
* @param userId
* @param idCard
* @return
*/
Boolean valid(String userId, String idCard);
}
......@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.hikcreate.common.orika.DefaultConverter;
import com.hikcreate.common.sdk.exception.BusinessException;
import com.hikcreate.common.sdk.response.apiparam.Response;
import com.hikcreate.common.sdk.response.statuscode.StatusCode;
import com.hikcreate.edl.common.distributed.lock.annotation.DistributedLock;
......@@ -47,6 +48,7 @@ import com.hikcreate.edl.pub.web.mobile.infra.model.param.response.VehicleDrivin
import com.hikcreate.edl.pub.web.mobile.infra.model.param.response.ViolationInfoRes;
import com.hikcreate.edl.pub.web.mobile.infra.model.param.response.YearCheckInfoRes;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
......@@ -117,6 +119,8 @@ public class BindServiceImpl extends ServiceImpl<BindInfoMapper, ParkBindInfo> i
private StringRedisTemplate redisTemplate;
private final ObjectMapper objectMapper = new ObjectMapper();
@Autowired
private StringRedisTemplate redisTemplate;
private final String bindKeyPrefix = "park:extend:bindInfo:";
......@@ -199,7 +203,7 @@ public class BindServiceImpl extends ServiceImpl<BindInfoMapper, ParkBindInfo> i
try {
String key = bindKeyPrefix.concat(info.getPhone()).concat("-").concat(info.getOwnerPhone());
redisTemplate.opsForValue().set(key, objectMapper.writeValueAsString(info), 30, TimeUnit.MINUTES);
} catch ( Exception e ) {
} catch (Exception e) {
log.error("绑定异常:{}", e.getMessage());
return ResultGenerator.fail(StatusCode.SYSTEM_ERROR);
}
......@@ -222,12 +226,12 @@ public class BindServiceImpl extends ServiceImpl<BindInfoMapper, ParkBindInfo> i
@Override
@Transactional(rollbackFor = Exception.class)
@DistributedLock(key = "'park:extend:lock:bind:smsValid:phone:'+#req.phone+':ownerPhone:'+#req.ownerPhone", isSpin = false)
public Result bindSmsValid( BindSmsValidReq req ) {
public Result bindSmsValid(BindSmsValidReq req) {
try {
//获取缓存信息
String key = bindKeyPrefix.concat(req.getPhone()).concat("-").concat(req.getOwnerPhone());
String bindInfoStr = redisTemplate.opsForValue().get(key);
if( StrUtil.isBlank(bindInfoStr) ) {
if (StrUtil.isBlank(bindInfoStr)) {
log.error("车辆绑定短信验证失败:未发起车辆绑定");
return ResultGenerator.fail(StatusCode.BUSINESS_ERROR.getCode(), "已超时");
}
......@@ -242,13 +246,13 @@ public class BindServiceImpl extends ServiceImpl<BindInfoMapper, ParkBindInfo> i
//绑定信息入库
bindInfo.setUnqId(unqIdUtil.getUnqId());
bindInfo.setGmtBindTime(new Date());
if(!bindCache.insert(bindInfo)) {
if (!bindCache.insert(bindInfo)) {
log.error("车辆绑定短信验证失败:绑定信息入库失败");
return ResultGenerator.fail(StatusCode.SYSTEM_ERROR);
}
return ResultGenerator.success(new BindInfoRes(bindInfo.getUnqId()));
} catch ( JsonProcessingException e ) {
log.error("车辆绑定短信验证异常:{}",e.getMessage());
} catch (JsonProcessingException e) {
log.error("车辆绑定短信验证异常:{}", e.getMessage());
return ResultGenerator.fail(StatusCode.SYSTEM_ERROR);
}
}
......@@ -283,11 +287,11 @@ public class BindServiceImpl extends ServiceImpl<BindInfoMapper, ParkBindInfo> i
*/
@Override
@DistributedLock(key = "'park:extend:lock:adnmUnbind:unqId:'+#req.unqId", isSpin = false)
public Result adminUnbind( AdminUnbindReq req ) {
public Result adminUnbind(AdminUnbindReq req) {
//获取绑定信息
ParkBindInfo parkBindInfo = bindCache.getById(req.getUnqId());
if( parkBindInfo==null || "0".equals(parkBindInfo.getStatus())
|| !parkBindInfo.getUserId().equals(req.getUserId()) ) {
if (parkBindInfo == null || "0".equals(parkBindInfo.getStatus())
|| !parkBindInfo.getUserId().equals(req.getUserId())) {
return ResultGenerator.fail(ResultCode.BIND_INFO_UNKNOWN);
}
//发送验证码
......@@ -309,10 +313,10 @@ public class BindServiceImpl extends ServiceImpl<BindInfoMapper, ParkBindInfo> i
@Override
@Transactional(rollbackFor = Exception.class)
@DistributedLock(key = "'park:extend:lock:adminUnbind:smsValid:unqId:'+#req.unqId", isSpin = false)
public Result adminUnbindSmsValid( AdminUnbindSmsValidReq req ) {
public Result adminUnbindSmsValid(AdminUnbindSmsValidReq req) {
//获取绑定信息
ParkBindInfo parkBindInfo = bindCache.getById(req.getUnqId());
if( parkBindInfo==null || "0".equals(parkBindInfo.getStatus()) ) {
if (parkBindInfo == null || "0".equals(parkBindInfo.getStatus())) {
return ResultGenerator.fail(ResultCode.BIND_INFO_UNKNOWN);
}
//验证短信
......@@ -449,7 +453,7 @@ public class BindServiceImpl extends ServiceImpl<BindInfoMapper, ParkBindInfo> i
queryReq.setTimeStart(DateUtil.offsetMonth(new Date(), -12));
List<ViolationMicRes> byPlateNumAndType = violationCache.getByPlateNumAndType(queryReq);
//过滤已处理信息
byPlateNumAndType = byPlateNumAndType.stream().filter(v->!"1".equals(v.getStatus())).collect(Collectors.toList());
byPlateNumAndType = byPlateNumAndType.stream().filter(v -> !"1".equals(v.getStatus())).collect(Collectors.toList());
/**
* 构建违章信息返回列表
......@@ -524,6 +528,7 @@ public class BindServiceImpl extends ServiceImpl<BindInfoMapper, ParkBindInfo> i
VehicleDrivingLicenseInfoRes result = new VehicleDrivingLicenseInfoRes();
result.setDriverName(drivingLicenseRes.getXm());
result.setPlateNum(byPlateNumAndType.getHphm());
result.setUserId(query.getUserId());
result.setDlQr(qrInfo.getData().getQr());
String validityTime = drivingLicenseRes.getYxqz();
if (StrUtil.isNotBlank(validityTime) && !"null".equalsIgnoreCase(validityTime)) {
......@@ -537,6 +542,59 @@ public class BindServiceImpl extends ServiceImpl<BindInfoMapper, ParkBindInfo> i
return ResultGenerator.success(result);
}
@Override
public void saveValid(String userId, String unqId, String phone) {
/**
* 校验当前的绑定信息是否存在
*/
ParkBindInfo bindInfo = bindCache.getById(unqId);
if (bindInfo == null || "0".equals(bindInfo.getStatus())) {
throw new BusinessException(ResultCode.BIND_INFO_UNKNOWN);
}
if (!bindInfo.getUserId().equals(userId) || !bindInfo.getPhone().equals(phone)) {
throw new BusinessException((StatusCode.PARAM_ERROR.getCode(), "客户唯一编码或手机号不正确");
}
/**
* 根据车牌号和车牌类型查询车辆信息
*/
PlateNumAndTypeQueryReq vechicleInfoReq = new PlateNumAndTypeQueryReq();
vechicleInfoReq.setPlateType(bindInfo.getPlateType());
vechicleInfoReq.setPlateNum(bindInfo.getPlateNum());
VehicleRes byPlateNumAndType = vechicleCache.getByPlateNumAndType(vechicleInfoReq);
if (byPlateNumAndType.getSfzmhm() == null) {
throw new BusinessException(ResultCode.DRIVING_LICENSE_UNKNOWN);
}
/**
* 根据身份证号码查询驾照信息
*/
IdCardQueryReq idCardQueryReq = new IdCardQueryReq();
idCardQueryReq.setIdCard(byPlateNumAndType.getSfzmhm());
DrivingLicenseRes drivingLicenseRes = drivingLicenseCache.getByIdCard(idCardQueryReq);
if (drivingLicenseRes == null) {
throw new BusinessException(ResultCode.DRIVING_LICENSE_UNKNOWN);
}
// 存至缓存,有效期一天
redisTemplate.opsForValue().set(getValidKey(userId, drivingLicenseRes.getSfzmhm()), phone, 24 * 3600, TimeUnit.SECONDS);
}
/**
* 验证是否已通过短信验证
*
* @param userId
* @param idCard
* @return
*/
@Override
public Boolean valid(String userId, String idCard) {
String s = redisTemplate.opsForValue().get(getValidKey(userId, idCard));
return !StringUtils.isEmpty(s);
}
private String getValidKey(String userId, String idCard) {
return "VehValidKey:" + userId + ":" + idCard;
}
}
......
package com.hikcreate.edl.pub.web.mobile.domain.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.hikcreate.common.sdk.exception.BusinessException;
import com.hikcreate.edl.common.sdk.util.VerifyCodeUtil;
......@@ -10,7 +11,10 @@ import com.hikcreate.edl.pub.web.mobile.infra.data.feign.edl_pub_service_sms.par
import com.hikcreate.edl.pub.web.mobile.infra.data.feign.edl_pub_service_sms.param.request.SendVerifyCodeMicReq;
import com.hikcreate.edl.pub.web.mobile.infra.data.feign.edl_pvt_service_drivinglicense.DrivingLicenseFeign;
import com.hikcreate.edl.pub.web.mobile.infra.data.feign.edl_pvt_service_drivinglicense.request.CreditIdCardMicReq;
import com.hikcreate.edl.pub.web.mobile.infra.data.feign.edl_pvt_service_drivinglicense.request.IdCardMicReq;
import com.hikcreate.edl.pub.web.mobile.infra.data.feign.edl_pvt_service_drivinglicense.response.DlQrRes;
import com.hikcreate.edl.pub.web.mobile.infra.data.feign.edl_pvt_service_drivinglicense.response.DrivingLicenseMicRes;
import com.hikcreate.edl.pub.web.mobile.infra.model.param.response.DrivingLicenseInfoRes;
import com.hikcreate.edl.pub.web.mobile.infra.model.param.response.DrivingLicenseValidRes;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -18,6 +22,7 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.Date;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
......@@ -82,6 +87,28 @@ public class DrivingLicenseServiceImpl implements DrivingLicenseService {
saveSmsValid(userId, drivingLicenseMicRes.getIdCard(), drivingLicenseMicRes.getPhone());
}
@Override
public DrivingLicenseInfoRes getDrivingLicenseInfo(String userId) {
DrivingLicenseMicRes drivingLicenseMicRes = getFromRedis(userId);
DlQrRes data = drivingLicenseFeign.getQrInfo(new IdCardMicReq().setIdCard(drivingLicenseMicRes.getIdCard())).fallback().getData();
/**
* 构建驾照信息查询结果
*/
DrivingLicenseInfoRes result = new DrivingLicenseInfoRes();
result.setDriverName(drivingLicenseMicRes.getRealName());
result.setDlQr(data.getQr());
result.setValidityTime(drivingLicenseMicRes.getExpiryDate());
String status = DateUtil.compare(DateUtil.parseDate(drivingLicenseMicRes.getExpiryDate()), new Date()) >= 0 ? "有效" :
"已过期";
result.setStatus(status);
result.setUserId(userId);
result.setIdCard(drivingLicenseMicRes.getIdCard());
result.setSurplusGrade(String.valueOf(drivingLicenseMicRes.getResidualScore()));
return result;
}
private void saveSmsValid(String userId, String idCard, String phone) {
redisTemplate.opsForValue().set(getSmsKey(userId, idCard), phone, 300, TimeUnit.SECONDS);
}
......
package com.hikcreate.edl.pub.web.mobile.infra.model.param.request;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* @author MOUBK
* @create 2020/7/21 16:43
*/
@Data
public class IdCardReq {
@NotBlank(message = "身份证号不能为空")
private String idCard;
}
package com.hikcreate.edl.pub.web.mobile.infra.model.param.request;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* @author MOUBK
* @create 2020/7/21 16:18
*/
@Data
public class UserIdReq {
@NotBlank(message = "用户Id不能为空")
private String userId;
}
......@@ -9,9 +9,11 @@ import lombok.Data;
@Data
public class DrivingLicenseInfoRes {
private String userId;
// 身份证号
private String idCard;
/**
*有效期止
* 有效期止
*/
private String validityTime;
/**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment