Commit 015d4257 authored by kang.nie@inzymeits.com's avatar kang.nie@inzymeits.com
Browse files

初始化代码

parent bd38ff8b
Pipeline #3108 failed with stages
in 0 seconds
package com.cusc.nirvana.user.rnr.fp.dto;
import com.alibaba.fastjson.annotation.JSONField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* Description: T1开户信息DTO
* <br />
* CreateDate 2022-04-02 15:13:40
*
* @author yuyi
**/
@Data
@ApiModel("T1车辆信息DTO")
public class T1CarInfoCMCCDTO implements Serializable {
private static final long serialVersionUID = -267145861320351989L;
@ApiModelProperty("请求标识 M")
@JSONField(name = "RequestID")
private String requestId;
@ApiModelProperty("道路机动车辆生产企业编码 M")
@JSONField(name = "Code")
private String code;
@ApiModelProperty("车辆加密信息 M")
@JSONField(name = "EncryptCarInfo")
private String encryptCarInfo;
@ApiModelProperty(value = "认证信息 M")
@JSONField(name = "Auth")
private T1AuthDTO Auth;
}
package com.cusc.nirvana.user.rnr.fp.dto;
import com.alibaba.fastjson.annotation.JSONField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* Description: T1开户信息DTO
* <br />
* CreateDate 2022-04-02 15:13:40
*
* @author yuyi
**/
@Data
@ApiModel("T1车辆信息DTO")
public class T1CarInfoDTO implements Serializable {
private static final long serialVersionUID = -267145861320351989L;
@ApiModelProperty("请求标识 M")
@JSONField(name = "RequestID")
private String requestId;
@ApiModelProperty("道路机动车辆生产企业编码 M")
@JSONField(name = "Code")
private String code;
@ApiModelProperty("车辆加密信息 M")
@JSONField(name = "EncryptCarInfo")
private String encryptCarInfo;
@ApiModelProperty("卡所属运营商 M")
@JSONField(name = "ServiceProvider")
private String serviceProvider;
}
package com.cusc.nirvana.user.rnr.fp.dto;
import com.alibaba.fastjson.annotation.JSONField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.*;
/**
* Description: T1公共响应
* <br />
* CreateDate 2022-03-11 15:42:31
*
* @author yuyi
**/
@ApiModel(value = "T1公共响应", description = "T1公共响应")
@Data
public class T1CommonResponseDTO implements Serializable {
private static final long serialVersionUID = -36413222636238414L;
@ApiModelProperty(value = "请求标识")
@JSONField(name = "RequestID")
private String RequestID;
@ApiModelProperty(value = "操作结果")
@JSONField(name = "OprRst")
private String OprRst;
@ApiModelProperty(value = "失败原因")
@JSONField(name = "FailureCause")
private String FailureCause;
@ApiModelProperty(value = "文件系统响应的唯一id")
@JSONField(name = "FileId")
private String FileId;
@ApiModelProperty(value = "一证十卡校验结果")
@JSONField(name = "CustomerCheck")
private String CustomerCheck;
public T1CommonResponseDTO() {
}
public T1CommonResponseDTO(String requestID, String oprRst, String failureCause) {
RequestID = requestID;
OprRst = oprRst;
FailureCause = failureCause;
}
public T1CommonResponseDTO(String requestID, String oprRst) {
RequestID = requestID;
OprRst = oprRst;
}
/**
* Description: 创建成功响应对象
* <br />
* CreateDate 2022-03-11 16:18:13
*
* @author yuyi
**/
public static T1CommonResponseDTO createSuccess(String requestID) {
return new T1CommonResponseDTO(requestID, "1");
}
/**
* Description: 创建失败响应对象
* <br />
* CreateDate 2022-03-11 16:18:13
*
* @author yuyi
**/
public static T1CommonResponseDTO createError(String requestID, String failureCause) {
return new T1CommonResponseDTO(requestID, "2", failureCause);
}
}
package com.cusc.nirvana.user.rnr.fp.dto;
import com.alibaba.fastjson.annotation.JSONField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.*;
/**
* Description: T1开户信息上报请求dto
* <br />
* CreateDate 2022-03-11 15:42:31
*
* @author yuyi
**/
@ApiModel(value = "T1开户信息上报请求dto", description = "T1开户信息上报请求dto")
@Data
public class T1FileReqDTO implements Serializable {
private static final long serialVersionUID = -36413222636238414L;
@ApiModelProperty(value = "请求标识")
@JSONField(name = "RequestID")
private String RequestID;
@ApiModelProperty(value = "道路机动车辆生产企业编码")
@JSONField(name = "Code")
private String Code;
@ApiModelProperty(value = "图片文件加密信息")
@JSONField(name = "EncryptFile")
private File EncryptFile;
@ApiModelProperty(value = "卡所属运营商")
@JSONField(name = "ServiceProvider")
private String ServiceProvider = "3000";
@ApiModelProperty(value = "车企标识")
@JSONField(name = "PlatformID")
private String PlatformID;
}
package com.cusc.nirvana.user.rnr.fp.dto;
import com.alibaba.fastjson.annotation.JSONField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* Description: T1开户信息DTO
* <br />
* CreateDate 2022-04-02 15:13:40
*
* @author yuyi
**/
@Data
@ApiModel("T1开户信息DTO")
public class T1UserInfoDTO implements Serializable {
private static final long serialVersionUID = -267145861320351989L;
@ApiModelProperty("车联网卡MSISDN M")
@JSONField(name = "MSISDN")
private String MSISDN;
@ApiModelProperty("车联网卡ICCID M")
@JSONField(name = "ICCID")
private String ICCID;
@ApiModelProperty("车辆识别代号或车架号 M")
@JSONField(name = "VIN")
private String VIN;
@ApiModelProperty("车辆状态 M")
@JSONField(name = "VehicleStatus")
private String VehicleStatus;
@ApiModelProperty("状态变更时间 C")
@JSONField(name = "StatusUpdateTime")
private String StatusUpdateTime;
@ApiModelProperty("受理时间 M")
@JSONField(name = "AcceptTime")
private String AcceptTime;
@ApiModelProperty("用户类型 M 1表示个人用户 2表示单位用户")
@JSONField(name = "CustomerType")
private String CustomerType;
@ApiModelProperty("用户姓名 M")
@JSONField(name = "CustomerName")
private String CustomerName;
@ApiModelProperty("用户证件类型 M")
@JSONField(name = "CustomerCertType")
private String CustomerCertType;
@ApiModelProperty("用户证件号码 M")
@JSONField(name = "CustomerCertNumber")
private String CustomerCertNumber;
@ApiModelProperty("用户证件地址 M")
@JSONField(name = "CustomerCertAddress")
private String CustomerCertAddress;
@ApiModelProperty("用户证件有效期 M")
@JSONField(name = "CustomerCertDate")
private String CustomerCertDate;
@ApiModelProperty("用户通讯地址 C 获取到时必须上报")
@JSONField(name = "CustomerPosterAddress")
private String CustomerPosterAddress;
@ApiModelProperty("用户通信号码 C 获取到时必须上报")
@JSONField(name = "CustomerPosterTelephone")
private String CustomerPosterTelephone;
@ApiModelProperty("单位名称 C 销售给单位用户时必填")
@JSONField(name = "CompanyName")
private String CompanyName;
@ApiModelProperty("单位证件类型 C 销售给单位用户时必填")
@JSONField(name = "CompanyCertType")
private String CompanyCertType;
@ApiModelProperty("单位证件号码 C 销售给单位用户时必填")
@JSONField(name = "CompanyCertNumber")
private String CompanyCertNumber;
@ApiModelProperty("单位证件地址 C 销售给单位用户时必填")
@JSONField(name = "CompanyCertAddress")
private String CompanyCertAddress;
@ApiModelProperty("单位通讯地址 C 销售给单位用户时必填")
@JSONField(name = "CompanyPosterAddress")
private String CompanyPosterAddress;
@ApiModelProperty("责任人姓名 C 销售给单位用户时必填")
@JSONField(name = "CorporationName")
private String CorporationName;
@ApiModelProperty("责任人证件类型 C 销售给单位用户时必填")
@JSONField(name = "CorporationCertType")
private String CorporationCertType;
@ApiModelProperty("责任人证件号码 C 销售给单位用户时必填")
@JSONField(name = "CorporationCertNumber")
private String CorporationCertNumber;
@ApiModelProperty("责任人证件地址 C 销售给单位用户时必填")
@JSONField(name = "CorporationCertAddress")
private String CorporationCertAddress;
@ApiModelProperty("责任人通讯地址 C 销售给单位用户情况下,企业获取到时必填")
@JSONField(name = "CorporationPosterAddress")
private String CorporationPosterAddress;
@ApiModelProperty("责任人电话 C 销售给单位用户时必填")
@JSONField(name = "CorporationTelephone")
private String CorporationTelephone;
@ApiModelProperty("代/经办人姓名 C 个人委托代办时必填")
@JSONField(name = "OperatorName")
private String OperatorName;
@ApiModelProperty("代/经办人证件类型 C 个人委托代办时必填")
@JSONField(name = "OperatorCertType")
private String OperatorCertType;
@ApiModelProperty("代/经办人证件号码 C 个人委托代办时必填")
@JSONField(name = "OperatorCertNumber")
private String OperatorCertNumber;
@ApiModelProperty("代/经办人证件地址 C 个人委托代办时必填")
@JSONField(name = "OperatorCertAddress")
private String OperatorCertAddress;
@ApiModelProperty("代/经办人通讯地址 C 个人委托代办时必填")
@JSONField(name = "OperatorPosterAddress")
private String OperatorPosterAddress;
@ApiModelProperty("代/经办人电话 C 个人委托代办时必填")
@JSONField(name = "OperatorTelephone")
private String OperatorTelephone;
@ApiModelProperty("照片文件名 C 填写用户对应照片的压缩包名,命名规则ICCID+xcz.zip")
@JSONField(name = "PhoName")
private String PhoName;
@ApiModelProperty("运营商 M")
@JSONField(name = "ServiceProvider")
private String serviceProvider;
@ApiModelProperty("扩展字段 O 可选字段,可扩展任意若干字段")
@JSONField(name = "ExtendPara")
private String ExtendPara;
}
package com.cusc.nirvana.user.rnr.fp.dto;
import com.alibaba.fastjson.annotation.JSONField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.*;
/**
* Description: T1开户信息上报请求dto
* <br />
* CreateDate 2022-03-11 15:42:31
*
* @author yuyi
**/
@ApiModel(value = "T1开户信息上报请求dto", description = "T1开户信息上报请求dto")
@Data
public class T1UserInfoReqDTO implements Serializable {
private static final long serialVersionUID = -36413222636238414L;
@ApiModelProperty(value = "认证信息")
@JSONField(name = "Auth")
private T1AuthDTO Auth;
@ApiModelProperty(value = "数据操作类型")
@JSONField(name = "OperType")
private String OperType;
@ApiModelProperty(value = "请求标识")
@JSONField(name = "RequestID")
private String RequestID;
@ApiModelProperty(value = "道路机动车辆生产企业编码")
@JSONField(name = "Code")
private String Code;
@ApiModelProperty(value = "开户加密信息")
@JSONField(name = "EncryptUserInfo")
private String EncryptUserInfo;
@ApiModelProperty(value = "卡所属运营商")
@JSONField(name = "ServiceProvider")
private String ServiceProvider = "3000";
}
package com.cusc.nirvana.user.rnr.fp.dto;
import com.alibaba.fastjson.annotation.JSONField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* Description: T1车辆信息上传
* <br />
* CreateDate 2022-06-15 15:42:31
*
* @author zx
**/
@ApiModel(value = "T1车辆信息上传dto", description = "T1车辆信息上传dto")
@Data
public class T1VehicleInfoReqDTO implements Serializable {
private static final long serialVersionUID = -36413222636238414L;
@ApiModelProperty(value = "认证信息")
@JSONField(name = "Auth")
private T1AuthDTO Auth;
@ApiModelProperty(value = "请求标识")
@JSONField(name = "RequestID")
private String RequestID;
@ApiModelProperty(value = "道路机动车辆生产企业编码")
@JSONField(name = "Code")
private String Code;
@ApiModelProperty(value = "车辆加密信息")
@JSONField(name = "EncryptCarInfo")
private String EncryptCarInfo;
@ApiModelProperty(value = "卡所属运营商")
@JSONField(name = "ServiceProvider")
private String ServiceProvider = "3000";
}
package com.cusc.nirvana.user.rnr.fp.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
/**
* @author stayAnd
* @date 2022/5/18
*/
@Data
public class VinCardExcelData {
@ExcelProperty(value="vin",index=0)
private String vin;
@ExcelProperty(value="iccid",index=1)
private String iccid;
}
package com.cusc.nirvana.user.rnr.fp.handler;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.eiam.dto.OrganizationDTO;
import com.cusc.nirvana.user.exception.CuscUserException;
import com.cusc.nirvana.user.rnr.fp.dto.FpRnrSmsInfoDTO;
import com.cusc.nirvana.user.rnr.fp.dto.UnbindReceiceSMSDTO;
import com.cusc.nirvana.user.rnr.fp.service.IFpCardUnBindService;
import com.cusc.nirvana.user.rnr.fp.service.IOrganService;
import com.cusc.nirvana.user.rnr.fp.service.IRnrService;
import com.cusc.nirvana.user.rnr.mg.client.MgRnrCardInfoClient;
import com.cusc.nirvana.user.rnr.mg.client.MgRnrInfoClient;
import com.cusc.nirvana.user.rnr.mg.client.MgSurplusBindClient;
import com.cusc.nirvana.user.rnr.mg.client.RnrOrderClient;
import com.cusc.nirvana.user.rnr.mg.constants.RnrOrderStatusEnum;
import com.cusc.nirvana.user.rnr.mg.constants.RnrStatus;
import com.cusc.nirvana.user.rnr.mg.dto.MgCardNoticeDTO;
import com.cusc.nirvana.user.rnr.mg.dto.MgRnrCardInfoDTO;
import com.cusc.nirvana.user.rnr.mg.dto.MgRnrInfoDTO;
import com.cusc.nirvana.user.rnr.mg.dto.RnrOrderDTO;
import com.cusc.nirvana.user.util.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @className: EnterpriseUnBindCallBackHandler
* @description: 企业解绑短信回调
* @author: jk
* @date: 2022/6/17 16:36
* @version: 1.0
**/
@Slf4j
@Service
public class EnterpriseUnBindCallBackHandler implements MessageCallbackHandler {
@Resource
private MgRnrCardInfoClient mgRnrCardInfoClient;
@Resource
private MgRnrInfoClient mgRnrInfoClient;
@Resource
private RnrOrderClient rnrOrderClient;
@Resource
private IFpCardUnBindService cardUnBindService;
@Value("${message.callback.timeout:120}")
private int timeOut;
@Resource
private MgSurplusBindClient mgSurplusBindClient;
@Resource
private IRnrService iRnrService;
@Autowired
private IOrganService organService;
@Transactional
@Override
public Response callBack(FpRnrSmsInfoDTO rnrSmsInfoDTOResponseData, UnbindReceiceSMSDTO bean, long receiveTIme) {
log.warn("rnrSmsInfoDTOResponseData-------{},UnbindReceiceSMSDTO-------{}", JSONObject.toJSONString(rnrSmsInfoDTOResponseData), JSONObject.toJSONString(bean));
RnrOrderDTO rnrOrderDTO = new RnrOrderDTO();
rnrOrderDTO.setUuid(rnrSmsInfoDTOResponseData.getOrderId());
Response<RnrOrderDTO> orderStatus = cardUnBindService.getOrderStatus(rnrOrderDTO);
if (!orderStatus.isSuccess() || orderStatus.getData() == null) {
return Response.createError(orderStatus.getMsg(), orderStatus.getData());
}
RnrOrderDTO orderDTO = orderStatus.getData();
long startTime = rnrSmsInfoDTOResponseData.getCreateTime().getTime();
log.info("当前时间: {},短信发送时间: {}", DateUtils.currentTimeStr(), receiveTIme);
boolean isTimeOut = receiveTIme - timeOut * 1000 > startTime;
if (isTimeOut) {
//更新工单 超时
orderDTO.setOrderStatus(RnrOrderStatusEnum.CANCEL.getCode());
return cardUnBindService.updateOrder(orderDTO);
}
//获取rnrId
String rnrId = rnrSmsInfoDTOResponseData.getRnrId();
MgRnrCardInfoDTO mgRnrCardInfoDTO = new MgRnrCardInfoDTO();
mgRnrCardInfoDTO.setRnrId(rnrId);
//根据rnrId查询carInfo信息
Response<List<MgRnrCardInfoDTO>> mgRnrCardInfoResponse = mgRnrCardInfoClient.queryByList(mgRnrCardInfoDTO);
if (!mgRnrCardInfoResponse.isSuccess()) {
throw new CuscUserException(mgRnrCardInfoResponse.getCode(), mgRnrCardInfoResponse.getMsg());
}
List<MgRnrCardInfoDTO> mgRnrCardInfoDTOList = mgRnrCardInfoResponse.getData();
if (!bean.getReplyContent().toLowerCase().equals("y")) {
RnrOrderDTO rnrOrder = new RnrOrderDTO();
rnrOrder.setUuid(mgRnrCardInfoDTOList.get(0).getOrderId());
iRnrService.updateRnrInValid(rnrOrder);
orderDTO.setOrderStatus(RnrOrderStatusEnum.NOT_PASS.getCode());
return cardUnBindService.updateOrder(orderDTO);
}
//查询车企信息
String manufacturerOrgId;
OrganizationDTO organ = new OrganizationDTO();
organ.setTenantNo(orderDTO.getTenantNo());
organ.setUuid(orderDTO.getOrgId());
Response<OrganizationDTO> organResp = organService.getCarSubOrganByOrgId(organ);
if (organResp != null && organResp.isSuccess() && organResp.getData() != null) {
manufacturerOrgId = organResp.getData().getUuid();
} else {
log.warn("EnterpriseUnBindCallBackHandler 获取车企组织失败,{}", JSON.toJSONString(organResp));
manufacturerOrgId = "0";
}
List<MgCardNoticeDTO> cardNoticeDTOS = new ArrayList<>();
MgCardNoticeDTO mgCardNoticeDTO;
List<MgRnrCardInfoDTO> newCardIdList = new ArrayList<>();
MgRnrCardInfoDTO cardInfoDTO;
//新卡uuid
for (MgRnrCardInfoDTO cardTemp : mgRnrCardInfoDTOList) {
cardInfoDTO = new MgRnrCardInfoDTO();
cardInfoDTO.setUuid(cardTemp.getUuid());
newCardIdList.add(cardInfoDTO);
//构建消息通知
mgCardNoticeDTO = new MgCardNoticeDTO();
mgCardNoticeDTO.setIccid(cardTemp.getIccid());
mgCardNoticeDTO.setTenantNo(orderDTO.getTenantNo());
mgCardNoticeDTO.setVin(cardTemp.getIotId());
mgCardNoticeDTO.setRnrBizzType(orderDTO.getRnrBizzType());
mgCardNoticeDTO.setOrderId(orderDTO.getUuid());
mgCardNoticeDTO.setManufacturerOrgId(manufacturerOrgId);
mgCardNoticeDTO.setResultCode(RnrOrderStatusEnum.PASS.getCode());
mgCardNoticeDTO.setOrgId(orderDTO.getOrgId());
cardNoticeDTOS.add(mgCardNoticeDTO);
}
//老卡uuid
List<MgRnrCardInfoDTO> oldCardIdList = mgRnrCardInfoDTOList.stream().map(a -> {
MgRnrCardInfoDTO mg = new MgRnrCardInfoDTO();
mg.setUuid(a.getOldCardId());
return mg;
}).collect(Collectors.toList());
//批量更新老数据
mgRnrCardInfoClient.updateBatch(oldCardIdList);
//批量更新新数据
mgRnrCardInfoClient.updateBatch(newCardIdList);
//更新info
MgRnrInfoDTO mgRnrInfoDTO = new MgRnrInfoDTO();
mgRnrInfoDTO.setUuid(rnrId);
mgRnrInfoDTO.setRnrStatus(RnrStatus.UNBOUND.getCode());
mgRnrInfoClient.update(mgRnrInfoDTO);
//更新order
RnrOrderDTO rnrOrder = new RnrOrderDTO();
rnrOrder.setUuid(mgRnrCardInfoDTOList.get(0).getOrderId());
rnrOrder.setOrderStatus(RnrOrderStatusEnum.PASS.getCode());
rnrOrderClient.updateOrderStatus(rnrOrder);
mgSurplusBindClient.sendMQ(cardNoticeDTOS);
return Response.createSuccess("解绑成功");
}
}
package com.cusc.nirvana.user.rnr.fp.handler;
import com.cusc.nirvana.user.rnr.fp.dto.MessageBizTypeEnum;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* @author stayAnd
* @date 2022/3/31
*/
@Component
public class MessageCallBackContext implements ApplicationContextAware, InitializingBean {
private ApplicationContext context;
private Map<String, MessageCallbackHandler> messageCallbackHandlerMap;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.context = applicationContext;
}
public MessageCallbackHandler getWorkBackHandler(int bizType) {
MessageBizTypeEnum messageBizTypeEnum = MessageBizTypeEnum.getBizType(bizType);
if (null != messageBizTypeEnum) {
return messageCallbackHandlerMap.get(messageBizTypeEnum.getMessageCallBackHandlerName());
}
return null;
}
@Override
public void afterPropertiesSet() throws Exception {
messageCallbackHandlerMap = context.getBeansOfType(MessageCallbackHandler.class);
}
}
package com.cusc.nirvana.user.rnr.fp.handler;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.rnr.fp.dto.FpRnrSmsInfoDTO;
import com.cusc.nirvana.user.rnr.fp.dto.UnbindReceiceSMSDTO;
/**
* @author yubo
* @since 2022-05-04 16:16
*/
public interface MessageCallbackHandler {
/**
* 短信回调处理逻辑
* @param rnrSmsInfoDTOResponseData
* @param bean
* @return
*/
Response callBack(FpRnrSmsInfoDTO rnrSmsInfoDTOResponseData, UnbindReceiceSMSDTO bean,long receiveTIme);
}
package com.cusc.nirvana.user.rnr.fp.handler;
import com.cusc.nirvana.user.rnr.fp.common.constant.VinCardCheckBussinessDetailType;
import com.cusc.nirvana.user.rnr.fp.dto.VinCardCheckMessageResultDTO;
import java.util.List;
/**
* @author stayAnd
* @date 2022/6/1
*/
public interface VinCardCheckMessageHandler {
/**
* 车卡关系校验
* @param vin vin
* @param iccidList iccidList
* @param type 类型
* @return
*/
VinCardCheckMessageResultDTO checkVinCard(String vin, List<String> iccidList, VinCardCheckBussinessDetailType type);
}
package com.cusc.nirvana.user.rnr.fp.handler.impl;
import com.alibaba.fastjson.JSON;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.eiam.dto.OrganizationDTO;
import com.cusc.nirvana.user.rnr.fp.constants.ResultCodeEnum;
import com.cusc.nirvana.user.rnr.fp.dto.FpRnrSmsInfoDTO;
import com.cusc.nirvana.user.rnr.fp.dto.UnbindReceiceSMSDTO;
import com.cusc.nirvana.user.rnr.fp.handler.MessageCallbackHandler;
import com.cusc.nirvana.user.rnr.fp.service.IFpCardUnBindService;
import com.cusc.nirvana.user.rnr.fp.service.IFpChangeTboxService;
import com.cusc.nirvana.user.rnr.fp.service.IOrganService;
import com.cusc.nirvana.user.rnr.fp.service.IRnrService;
import com.cusc.nirvana.user.rnr.fp.service.impl.RnrServiceImpl;
import com.cusc.nirvana.user.rnr.mg.client.MgRnrCardInfoClient;
import com.cusc.nirvana.user.rnr.mg.client.MgSurplusBindClient;
import com.cusc.nirvana.user.rnr.mg.constants.RnrBizzTypeEnum;
import com.cusc.nirvana.user.rnr.mg.constants.RnrOrderStatusEnum;
import com.cusc.nirvana.user.rnr.mg.constants.RnrStatus;
import com.cusc.nirvana.user.rnr.mg.dto.MgCardNoticeDTO;
import com.cusc.nirvana.user.rnr.mg.dto.MgRnrCardInfoDTO;
import com.cusc.nirvana.user.rnr.mg.dto.RnrOrderDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
/**
* @author yubo
* @since 2022-05-04 16:20
*/
@Service
@Slf4j
public class CardUnBindMessageCallBackHandler implements MessageCallbackHandler {
@Value("${message.callback.timeout:120}")
private int timeOut;
@Resource
private IFpCardUnBindService cardUnBindService;
@Autowired
private IFpChangeTboxService changeTboxService;
@Resource
private MgRnrCardInfoClient cardInfoClient;
@Resource
private MgSurplusBindClient mgSurplusBindClient;
@Autowired
private IRnrService rnrService;
@Autowired
private IOrganService organService;
@Override
public Response callBack(FpRnrSmsInfoDTO rnrSmsInfoDTOResponseData, UnbindReceiceSMSDTO bean, long receiveTIme) {
RnrOrderDTO rnrOrderDTO = new RnrOrderDTO();
rnrOrderDTO.setUuid(rnrSmsInfoDTOResponseData.getOrderId());
com.cusc.nirvana.common.result.Response<RnrOrderDTO> orderStatus = cardUnBindService.getOrderStatus(rnrOrderDTO);
log.info("获取解绑工单信息: {}", JSON.toJSONString(orderStatus));
if (!orderStatus.isSuccess() || orderStatus.getData() == null) {
return Response.createError(orderStatus.getMsg(), orderStatus.getData());
}
long startTime = rnrSmsInfoDTOResponseData.getCreateTime().getTime();
log.info("当前时间: {},短信发送时间: {}", receiveTIme, toString());
boolean isTimeOut = receiveTIme - timeOut * 1000 > startTime;
if (isTimeOut) {
//更新工单 超时
RnrOrderDTO orderDTO = orderStatus.getData();
orderDTO.setOrderStatus(RnrOrderStatusEnum.CANCEL.getCode());
return cardUnBindService.updateOrder(orderDTO);
}
//根据工单id获取工单
if (!bean.getReplyContent().toLowerCase().equals("y")) {
//更新工单 失败
RnrOrderDTO orderDTO = orderStatus.getData();
orderDTO.setOrderStatus(RnrOrderStatusEnum.NOT_PASS.getCode());
return cardUnBindService.updateOrder(orderDTO);
} else {
//更新工单
RnrOrderDTO orderDTO = orderStatus.getData();
orderDTO.setOrderStatus(RnrOrderStatusEnum.PASS.getCode());
Response<RnrOrderDTO> orderResponse = cardUnBindService.updateOrder(orderDTO);
//查询卡信息
MgRnrCardInfoDTO query = new MgRnrCardInfoDTO();
query.setOrderId(rnrOrderDTO.getUuid());
//解绑新插入的卡信息
List<MgRnrCardInfoDTO> cardInfoList = cardInfoClient.queryByList(query).getData();
//关联的需要解绑卡信息
List<String> toUnbindCardUuIdList = cardInfoList.stream().map(MgRnrCardInfoDTO::getOldCardId).collect(Collectors.toList());
//新插入的卡信息和 原先需要解绑卡信息 全部解绑
List<String> cardInfoUuidList = cardInfoList.stream().map(MgRnrCardInfoDTO::getUuid).collect(Collectors.toList());
toUnbindCardUuIdList.addAll(cardInfoUuidList);
log.info("原车主解绑 orderId = {}, toUnbindCardUuIdList = {}",rnrOrderDTO.getUuid(),JSON.toJSONString(toUnbindCardUuIdList));
List<MgRnrCardInfoDTO> allUnBindCardList = toUnbindCardUuIdList.stream().map(uuid -> {
MgRnrCardInfoDTO unBindCard = new MgRnrCardInfoDTO();
unBindCard.setUuid(uuid);
return unBindCard;
}).collect(Collectors.toList());
//解绑所有的卡
Response unBindCardResult = changeTboxService.unbindCardList(allUnBindCardList);
String manufacturerOrgId;
OrganizationDTO organ = new OrganizationDTO();
organ.setTenantNo(orderDTO.getTenantNo());
organ.setUuid(orderDTO.getOrgId());
Response<OrganizationDTO> organResp = organService.getCarSubOrganByOrgId(organ);
if (organResp != null && organResp.isSuccess() && organResp.getData() != null) {
manufacturerOrgId = organResp.getData().getUuid();
} else {
log.warn("sendCardNoticeByOrderId 获取车企组织失败,{}", JSON.toJSONString(organResp));
manufacturerOrgId = "0";
}
//发送mq通知
List<MgCardNoticeDTO> mgCardNoticeList = createMqDTO(cardInfoList, orderDTO,manufacturerOrgId);
mgSurplusBindClient.sendMQ(mgCardNoticeList);
if (unBindCardResult.isSuccess() && orderResponse.isSuccess()) {
//将实名结果回传给智网
rnrService.notifyResult(cardInfoList,RnrBizzTypeEnum.Unbound.getCode().toString(),UUID.randomUUID().toString(),null, ResultCodeEnum.PASS.getCode());
return com.cusc.nirvana.common.result.Response.createSuccess("解绑卡/更新工单成功");
} else {
return com.cusc.nirvana.common.result.Response.createError("解绑卡/更新工单失败");
}
}
}
private List<MgCardNoticeDTO> createMqDTO(List<MgRnrCardInfoDTO> cardList, RnrOrderDTO orderDTO,
String manufacturerOrgId) {
List<MgCardNoticeDTO> cardNoticeList = new ArrayList<>();
MgCardNoticeDTO mgCardNoticeDTO;
for (MgRnrCardInfoDTO cardInfoDTO:cardList) {
mgCardNoticeDTO = new MgCardNoticeDTO();
mgCardNoticeDTO.setIccid(cardInfoDTO.getIccid());
mgCardNoticeDTO.setTenantNo(cardInfoDTO.getTenantNo());
mgCardNoticeDTO.setVin(cardInfoDTO.getIotId());
mgCardNoticeDTO.setRnrBizzType(orderDTO.getRnrBizzType());
mgCardNoticeDTO.setOrderId(orderDTO.getUuid());
mgCardNoticeDTO.setManufacturerOrgId(manufacturerOrgId);
mgCardNoticeDTO.setResultCode(orderDTO.getOrderStatus());
mgCardNoticeDTO.setOrgId(orderDTO.getOrgId());
cardNoticeList.add(mgCardNoticeDTO);
}
return cardNoticeList;
}
}
package com.cusc.nirvana.user.rnr.fp.handler.impl;
import com.alibaba.fastjson.JSON;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.eiam.dto.OrganizationDTO;
import com.cusc.nirvana.user.rnr.fp.constants.ResultCodeEnum;
import com.cusc.nirvana.user.rnr.fp.dto.BindRequestDTO;
import com.cusc.nirvana.user.rnr.fp.dto.FpRnrSmsInfoDTO;
import com.cusc.nirvana.user.rnr.fp.dto.UnbindReceiceSMSDTO;
import com.cusc.nirvana.user.rnr.fp.handler.MessageCallbackHandler;
import com.cusc.nirvana.user.rnr.fp.service.*;
import com.cusc.nirvana.user.rnr.mg.client.MgRnrCardInfoClient;
import com.cusc.nirvana.user.rnr.mg.client.MgSurplusBindClient;
import com.cusc.nirvana.user.rnr.mg.client.OrgSimRelClient;
import com.cusc.nirvana.user.rnr.mg.constants.RnrBizzTypeEnum;
import com.cusc.nirvana.user.rnr.mg.constants.RnrOrderStatusEnum;
import com.cusc.nirvana.user.rnr.mg.constants.RnrStatus;
import com.cusc.nirvana.user.rnr.mg.dto.MgCardNoticeDTO;
import com.cusc.nirvana.user.rnr.mg.dto.MgRnrCardInfoDTO;
import com.cusc.nirvana.user.rnr.mg.dto.RnrOrderDTO;
import com.cusc.nirvana.user.util.CuscStringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.function.Function;
import java.util.stream.Collectors;
@Service
@Slf4j
public class ChangeTBoxMessageCallBackHandler implements MessageCallbackHandler {
@Value("${message.callback.timeout:120}")
private int timeOut;
@Resource
private IFpCardUnBindService cardUnBindService;
@Resource
private IFpChangeTboxService changeTboxService;
@Resource
private MgRnrCardInfoClient cardInfoClient;
@Resource
private MgSurplusBindClient mgSurplusBindClient;
@Autowired
private IRnrService rnrService;
@Autowired
private ISimVehicleRelService simVehicleRelService;
@Autowired
private IOrganService organService;
@Resource
private OrgSimRelClient orgSimRelClient;
@Override
public Response callBack(FpRnrSmsInfoDTO rnrSmsInfoDTOResponseData, UnbindReceiceSMSDTO bean,long receiveTIme) {
RnrOrderDTO rnrOrderDTO = new RnrOrderDTO();
rnrOrderDTO.setUuid(rnrSmsInfoDTOResponseData.getOrderId());
Response<RnrOrderDTO> orderStatus = cardUnBindService.getOrderStatus(rnrOrderDTO);
if (!orderStatus.isSuccess() || orderStatus.getData() == null) {
return Response.createError(orderStatus.getMsg(), orderStatus.getData());
}
RnrOrderDTO orderDTO = orderStatus.getData();
long startTime = rnrSmsInfoDTOResponseData.getCreateTime().getTime();
log.info("当前时间: {},短信发送时间: {}", receiveTIme, toString());
boolean isTimeOut = receiveTIme - timeOut * 1000 > startTime;
if (isTimeOut) {
//更新工单 超时
orderDTO.setOrderStatus(RnrOrderStatusEnum.CANCEL.getCode());
return cardUnBindService.updateOrder(orderDTO);
}
//根据工单id获取工单
if (!bean.getReplyContent().toLowerCase().equals("y")) {
//更新工单 失败
orderDTO.setOrderStatus(RnrOrderStatusEnum.NOT_PASS.getCode());
return cardUnBindService.updateOrder(orderDTO);
} else {
//更新工单
orderDTO.setOrderStatus(RnrOrderStatusEnum.PASS.getCode());
cardUnBindService.updateOrder(orderDTO);
//根据工单查询 卡信息
MgRnrCardInfoDTO query = new MgRnrCardInfoDTO();
query.setOrderId(rnrOrderDTO.getUuid());
List<MgRnrCardInfoDTO> newCardList = cardInfoClient.queryByList(query).getData();
//获取老卡信息
List<String> oldUuIdList = newCardList.stream().map(MgRnrCardInfoDTO::getOldCardId).collect(Collectors.toList());
List<MgRnrCardInfoDTO> oldCardList = oldUuIdList.parallelStream().map(oldUuid -> {
MgRnrCardInfoDTO oldQuery = new MgRnrCardInfoDTO();
oldQuery.setUuid(oldUuid);
return cardInfoClient.getByUuid(oldQuery).getData();
}).collect(Collectors.toList());
//新卡设置绑定成功
//log.info("换件 新卡设置绑定成功:{}");
newCardList.parallelStream().forEach(card->{
MgRnrCardInfoDTO bindUpdate = new MgRnrCardInfoDTO();
bindUpdate.setUuid(card.getUuid());
bindUpdate.setRnrStatus(RnrStatus.RNR.getCode());
cardInfoClient.update(bindUpdate);
log.info("换件 新卡设置绑定 orderId = {},uuid= {},iccid = {}",rnrOrderDTO.getUuid(),card.getUuid(),card.getIccid());
});
//更新卡和VIN数据
MgRnrCardInfoDTO mgRnrCardInfoDTO = new MgRnrCardInfoDTO();
List<MgRnrCardInfoDTO> mgRnrCardInfoDTOList = newCardList.stream().map(a->{
mgRnrCardInfoDTO.setIccid(a.getIccid());
mgRnrCardInfoDTO.setIotId(a.getIotId());
return mgRnrCardInfoDTO;
}).collect(Collectors.toList());
orgSimRelClient.updateVin(mgRnrCardInfoDTOList);
//老卡设置解绑
oldCardList.parallelStream().forEach(card->{
MgRnrCardInfoDTO unBind = new MgRnrCardInfoDTO();
unBind.setUuid(card.getUuid());
unBind.setRnrStatus(RnrStatus.UNBOUND.getCode());
cardInfoClient.update(unBind);
log.info("换件 老卡设置解绑 orderId = {},uuid= {},iccid = {}",rnrOrderDTO.getUuid(),card.getUuid(),card.getIccid());
});
oldCardList.parallelStream().forEach(oldCard->{
//删除原有vin iccid 关联关系
BindRequestDTO bindRequestDTO = new BindRequestDTO();
bindRequestDTO.setVin(oldCard.getIotId());
bindRequestDTO.setIccid(oldCard.getIccid());
Response response = simVehicleRelService.unbind(bindRequestDTO);
if (!response.isSuccess()) {
log.error("解绑车卡关系失败,iccid:{}, vin:{}",oldCard.getIccid(),oldCard.getIotId());
}
});
List<String> oldIccid = oldCardList.stream().map(a->a.getIccid()).collect(Collectors.toList());
//换件需要将老卡VIN置空
orgSimRelClient.updateBindIccid(oldIccid);
//查询车企信息
String manufacturerOrgId;
OrganizationDTO organ = new OrganizationDTO();
organ.setTenantNo(orderDTO.getTenantNo());
organ.setUuid(orderDTO.getOrgId());
Response<OrganizationDTO> organResp = organService.getCarSubOrganByOrgId(organ);
if (organResp != null && organResp.isSuccess() && organResp.getData() != null) {
manufacturerOrgId = organResp.getData().getUuid();
} else {
log.warn("sendCardNoticeByOrderId 获取车企组织失败,{}", JSON.toJSONString(organResp));
manufacturerOrgId = "0";
}
//发送mq通知
List<MgCardNoticeDTO> mgCardNoticeList = createMqDTO(newCardList, oldCardList, orderDTO, manufacturerOrgId);
mgSurplusBindClient.sendMQ(mgCardNoticeList);
List<MgRnrCardInfoDTO> dtoList = new ArrayList<>();
mgCardNoticeList.forEach(e ->{
MgRnrCardInfoDTO dto = new MgRnrCardInfoDTO();
dto.setIotId(e.getVin());
dto.setIccid(e.getIccid());
dto.setOldCardId(e.getOldIccid());
dtoList.add(dto);
});
rnrService.notifyResult(dtoList,RnrBizzTypeEnum.ChangeBinding.getCode().toString(),UUID.randomUUID().toString(),null, ResultCodeEnum.PASS.getCode());
return com.cusc.nirvana.common.result.Response.createSuccess("解绑卡/更新工单成功");
}
}
private List<MgCardNoticeDTO> createMqDTO(List<MgRnrCardInfoDTO> newCardList, List<MgRnrCardInfoDTO> oldCardList,
RnrOrderDTO orderDTO,
String manufacturerOrgId) {
Map<String, MgRnrCardInfoDTO> oldCardMap = oldCardList.stream().collect(Collectors.toMap(MgRnrCardInfoDTO::getUuid, Function.identity(), (o1, o2) -> o1));
List<MgCardNoticeDTO> cardNoticeList = new ArrayList<>();
for (MgRnrCardInfoDTO newCard:newCardList) {
MgCardNoticeDTO mgCardNoticeDTO = new MgCardNoticeDTO();
mgCardNoticeDTO.setIccid(newCard.getIccid());
MgRnrCardInfoDTO oldCard = oldCardMap.get(newCard.getOldCardId());
if (null != oldCard) {
mgCardNoticeDTO.setOldIccid(oldCard.getIccid());
}
mgCardNoticeDTO.setTenantNo(newCard.getTenantNo());
mgCardNoticeDTO.setVin(newCard.getIotId());
mgCardNoticeDTO.setRnrBizzType(orderDTO.getRnrBizzType());
mgCardNoticeDTO.setOrderId(orderDTO.getUuid());
mgCardNoticeDTO.setManufacturerOrgId(manufacturerOrgId);
mgCardNoticeDTO.setResultCode(orderDTO.getOrderStatus());
mgCardNoticeDTO.setOrgId(orderDTO.getOrgId());
cardNoticeList.add(mgCardNoticeDTO);
}
return cardNoticeList;
}
}
package com.cusc.nirvana.user.rnr.fp.handler.impl;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.exception.CuscUserException;
import com.cusc.nirvana.user.rnr.mg.client.MgRnrCardInfoClient;
import com.cusc.nirvana.user.rnr.mg.constants.RnrStatus;
import com.cusc.nirvana.user.rnr.mg.dto.MgRnrCardInfoDTO;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
/**
* @author stayAnd
* @date 2022/6/7
*/
@Component("checkVinExistCheckHandler")
public class CheckVinExistCheckHandler extends CommonBindVinCardCheckHandlerImpl {
@Resource
private MgRnrCardInfoClient cardInfoClient;
@Override
protected void checkVin(String vin) {
MgRnrCardInfoDTO query = new MgRnrCardInfoDTO();
query.setIotId(vin);
Response<List<MgRnrCardInfoDTO>> response = cardInfoClient.queryByList(query);
if (null == response || !response.isSuccess()) {
throw new CuscUserException("","查询卡信息失败");
}
List<MgRnrCardInfoDTO> mgRnrCardInfoList = response.getData();
//自然人 - 新车 || 企业实名 || 车企实名
if (mgRnrCardInfoList.stream().anyMatch(
card -> RnrStatus.INIT.getCode() == card.getRnrStatus() || RnrStatus.RNR.getCode() == card.getRnrStatus())) {
// throw new CuscUserException("", "vin已经存在实名信息,请走一车多卡流程");
throw new CuscUserException("", "您提交的VIN号已实名,请勿重复提交实名!");
}
}
}
package com.cusc.nirvana.user.rnr.fp.handler.impl;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.exception.CuscUserException;
import com.cusc.nirvana.user.rnr.mg.client.MgRnrCardInfoClient;
import com.cusc.nirvana.user.rnr.mg.constants.RnrStatus;
import com.cusc.nirvana.user.rnr.mg.dto.MgRnrCardInfoDTO;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author stayAnd
* @date 2022/6/7
*/
@Component("checkVinNotExistCheckHandler")
public class CheckVinNotExistCheckHandler extends CommonBindVinCardCheckHandlerImpl {
@Resource
private MgRnrCardInfoClient cardInfoClient;
@Override
protected void checkVin(String vin) {
MgRnrCardInfoDTO query = new MgRnrCardInfoDTO();
query.setIotId(vin);
Response<List<MgRnrCardInfoDTO>> response = cardInfoClient.queryByList(query);
if (null == response || !response.isSuccess()) {
throw new CuscUserException("","查询卡信息失败");
}
List<MgRnrCardInfoDTO> mgRnrCardInfoList = response.getData();
List<MgRnrCardInfoDTO> rnrCardList = mgRnrCardInfoList.stream()
.filter(card -> card.getRnrStatus() == RnrStatus.RNR.getCode()).collect(Collectors.toList());
if (CollectionUtils.isEmpty(rnrCardList)) {
throw new CuscUserException("", "该vin号未查询到实名的卡信息");
}
}
}
package com.cusc.nirvana.user.rnr.fp.handler.impl;
import com.alibaba.fastjson.JSONObject;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.exception.CuscUserException;
import com.cusc.nirvana.user.rnr.fp.common.constant.VinCardCheckBussinessDetailType;
import com.cusc.nirvana.user.rnr.fp.dto.*;
import com.cusc.nirvana.user.rnr.fp.handler.VinCardCheckMessageHandler;
import com.cusc.nirvana.user.rnr.fp.service.ISimVehicleRelService;
import com.cusc.nirvana.user.rnr.mg.client.MgRnrCardInfoClient;
import com.cusc.nirvana.user.rnr.mg.constants.RnrStatus;
import com.cusc.nirvana.user.rnr.mg.dto.MgRnrCardInfoDTO;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author stayAnd
* @date 2022/6/1
* 通用绑卡业务 车卡关系校验实现
*/
@Component("commonBindVinCardCheckHandler")
@Slf4j
public class CommonBindVinCardCheckHandlerImpl implements VinCardCheckMessageHandler {
@Resource
private MgRnrCardInfoClient cardInfoClient;
@Resource
private ISimVehicleRelService simVehicleRelService;
@Override
public VinCardCheckMessageResultDTO checkVinCard(String vin, List<String> iccidList, VinCardCheckBussinessDetailType type) {
VinCardCheckMessageResultDTO resultDTO = new VinCardCheckMessageResultDTO();
checkVin(vin);
List<VinCardCheckMessageFailDTO> failDTOList = new ArrayList<>();
//输入的卡是否存在 已实名/初始化(认证中)的记录
List<VinCardCheckMessageFailDTO> localCheckList = checkCardFromLocal(iccidList);
if (!CollectionUtils.isEmpty(localCheckList)) {
failDTOList.addAll(localCheckList);
}
//查询卡是否存在
List<VinCardCheckMessageFailDTO> exsitCheckList = checkCardExist(iccidList);
if (!CollectionUtils.isEmpty(exsitCheckList)) {
failDTOList.addAll(exsitCheckList);
}
//查询车卡关系
List<VinCardCheckMessageFailDTO> vinRelationCheckList = checkVinCardRelation(iccidList,vin);
if (!CollectionUtils.isEmpty(vinRelationCheckList)) {
failDTOList.addAll(vinRelationCheckList);
}
//构建参数
resultDTO.build(failDTOList);
return resultDTO;
}
protected void checkVin(String vin){
//子类有特殊判断实现此方法
}
/**
* 通过mg 查询本地库是否存在车卡关系
* @param iccidList
* @return
*/
private List<VinCardCheckMessageFailDTO> checkCardFromLocal(List<String> iccidList) {
MgRnrCardInfoDTO query = new MgRnrCardInfoDTO();
query.setIccidList(iccidList);
Response<List<MgRnrCardInfoDTO>> response = cardInfoClient.queryByList(query);
if (null == response || !response.isSuccess()) {
throw new CuscUserException("", "查询实名库卡信息失败");
}
List<MgRnrCardInfoDTO> cardInfoDTOList = response.getData();
if (CollectionUtils.isEmpty(cardInfoDTOList)) {
return new ArrayList<>();
}
return cardInfoDTOList.stream()
.filter(card ->
RnrStatus.INIT.getCode() == card.getRnrStatus() || RnrStatus.RNR.getCode() == card.getRnrStatus()
).map(card ->
new VinCardCheckMessageFailDTO().setIccid(card.getIccid()).setErrorMsg("输入的卡信息已存在实名记录")
).collect(Collectors.toList());
}
/**
* 判断绑业务的卡 是不是 存在
* @param iccidList
* @return
*/
private List<VinCardCheckMessageFailDTO> checkCardExist(List<String> iccidList) {
List<VinCardCheckMessageFailDTO> returnList = Collections.synchronizedList(new ArrayList<>());
if (CollectionUtils.isEmpty(iccidList)) {
return returnList;
}
List<List<String>> partitionIccIdList = Lists.partition(iccidList, 100);
partitionIccIdList.parallelStream().forEach(list -> {
IccidListDTO dto = new IccidListDTO();
dto.setIccidList(list);
Response<List<IccidDetailDTO>> detailResponse = simVehicleRelService.queryByIccids(dto);
log.info("checkCardExist,request = {},response = {}", JSONObject.toJSONString(list), JSONObject.toJSONString(detailResponse));
if (null == detailResponse || !detailResponse.isSuccess()) {
throw new CuscUserException("", "查询卡详情失败");
}
//查询到详情的iccid列表
List<String> detailIccidList = detailResponse.getData().stream().map(IccidDetailDTO::getIccid).collect(Collectors.toList());
//过滤出未查询到详情的iccid卡
List<VinCardCheckMessageFailDTO> notExsitList = list.stream()
.filter(iccid ->
!detailIccidList.contains(iccid)
).map(iccid ->
new VinCardCheckMessageFailDTO().setIccid(iccid).setErrorMsg("")
).collect(Collectors.toList());
returnList.addAll(notExsitList);
});
return returnList;
}
/**
* 判断绑定的卡的 vin 是否一致
* @param iccidList
* @param vin
* @return
*/
private List<VinCardCheckMessageFailDTO> checkVinCardRelation(List<String> iccidList, String vin) {
return iccidList.parallelStream().filter(iccid->{
Response<VinIccidDTO> response = simVehicleRelService.getVinByIccid(iccid);
log.info("checkVinCardRelation request = {} , response = {}",iccid,JSONObject.toJSONString(response));
if (null == response || !response.isSuccess()) {
throw new CuscUserException("","根据iccid查询vin失败,iccid:"+iccid);
}
return null != response.getData() && !vin.equals(response.getData().getVin());
}).map(iccid->new VinCardCheckMessageFailDTO().setIccid(iccid).setErrorMsg("卡信息的vin码和输入的vin不一致")).collect(Collectors.toList());
}
}
package com.cusc.nirvana.user.rnr.fp.handler.impl;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.exception.CuscUserException;
import com.cusc.nirvana.user.rnr.fp.common.constant.VinCardCheckBussinessDetailType;
import com.cusc.nirvana.user.rnr.fp.dto.*;
import com.cusc.nirvana.user.rnr.fp.handler.VinCardCheckMessageHandler;
import com.cusc.nirvana.user.rnr.fp.service.ISimVehicleRelService;
import com.cusc.nirvana.user.rnr.mg.client.MgRnrCardInfoClient;
import com.cusc.nirvana.user.rnr.mg.constants.RnrStatus;
import com.cusc.nirvana.user.rnr.mg.dto.MgRnrCardInfoDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author stayAnd
* @date 2022/6/1
* 通用绑卡业务 车卡关系校验实现
*/
@Component("commonUnBindVinCardCheckHandler")
@Slf4j
public class CommonUnBindVinCardCheckHandlerImpl implements VinCardCheckMessageHandler {
@Resource
private MgRnrCardInfoClient cardInfoClient;
@Resource
private ISimVehicleRelService simVehicleRelService;
@Override
public VinCardCheckMessageResultDTO checkVinCard(String vin, List<String> iccidList, VinCardCheckBussinessDetailType type) {
VinCardCheckMessageResultDTO resultDTO = new VinCardCheckMessageResultDTO();
MgRnrCardInfoDTO query = new MgRnrCardInfoDTO();
query.setIccidList(iccidList);
Response<List<MgRnrCardInfoDTO>> response = cardInfoClient.queryByList(query);
if (null == response || !response.isSuccess()) {
throw new CuscUserException("","查询卡信息失败");
}
List<MgRnrCardInfoDTO> cardInfoDTOList = response.getData();
List<String> hasRnrIccidList = cardInfoDTOList.stream()
.filter(card -> RnrStatus.RNR.getCode() == card.getRnrStatus()).map(MgRnrCardInfoDTO::getIccid)
.collect(Collectors.toList());
//失败错误的卡
List<VinCardCheckMessageFailDTO> failDTOList = new ArrayList<>();
//非实名的卡
List<MgRnrCardInfoDTO> notRnrCardList = cardInfoDTOList.stream().filter(card -> !hasRnrIccidList.contains(card.getIccid())).collect(Collectors.toList());
List<VinCardCheckMessageFailDTO> notRnrErrorList = notRnrCardList.stream().map(card -> {
VinCardCheckMessageFailDTO failDTO = new VinCardCheckMessageFailDTO();
failDTO.setIccid(card.getIccid());
failDTO.setErrorMsg("输入的卡信息存在非实名的卡");
return failDTO;
}).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(notRnrErrorList)) {
failDTOList.addAll(notRnrErrorList);
}
//构建参数
resultDTO.build(failDTOList);
return resultDTO;
}
protected void checkVin(String vin){
//子类有特殊判断实现此方法
}
}
package com.cusc.nirvana.user.rnr.fp.handler.impl;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.rnr.fp.dto.FpRnrSmsInfoDTO;
import com.cusc.nirvana.user.rnr.fp.dto.UnbindReceiceSMSDTO;
import com.cusc.nirvana.user.rnr.fp.handler.MessageCallbackHandler;
import com.cusc.nirvana.user.rnr.fp.service.IFpSurplusCardBindService;
import com.cusc.nirvana.user.rnr.mg.constants.MessageCallbackStatusEnum;
import com.cusc.nirvana.user.rnr.mg.dto.SurplusConfirmDto;
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.stereotype.Service;
/**
* @author yubo
* @since 2022-05-04 16:27
*/
@Service
@Slf4j
public class SurplusMessageCallBackHandler implements MessageCallbackHandler {
@Value("${message.callback.timeout:120}")
private int timeOut;
@Autowired
IFpSurplusCardBindService cardBindService;
@Override
public Response callBack(FpRnrSmsInfoDTO rnrSmsInfoDTOResponseData, UnbindReceiceSMSDTO bean,long receiveTIme) {
SurplusConfirmDto surplusConfirmDto = new SurplusConfirmDto();
long startTime = rnrSmsInfoDTOResponseData.getCreateTime().getTime();
log.info("当前时间: {},短信发送时间: {}", receiveTIme, toString());
boolean isTimeOut = receiveTIme - timeOut * 1000 > startTime;
if (isTimeOut) {
surplusConfirmDto.setCallbackStatusEnum(MessageCallbackStatusEnum.TIMEOUT.getCode());
} else {
surplusConfirmDto.setCallbackStatusEnum(
StringUtils.equalsIgnoreCase(bean.getReplyContent(), "y") ?
MessageCallbackStatusEnum.Y.getCode() : MessageCallbackStatusEnum.N.getCode());
}
surplusConfirmDto.setOrderId(rnrSmsInfoDTOResponseData.getOrderId());
return Response.createSuccess(cardBindService.confirm(surplusConfirmDto));
}
}
package com.cusc.nirvana.user.rnr.fp.scheduled;
import com.cache.CacheFactory;
import com.cache.exception.CacheException;
import com.cusc.nirvana.common.result.PageResult;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.rnr.fp.common.constant.FpRedisConstant;
import com.cusc.nirvana.user.rnr.fp.service.IRnrService;
import com.cusc.nirvana.user.rnr.mg.client.RnrOrderClient;
import com.cusc.nirvana.user.rnr.mg.constants.RnrOrderStatusEnum;
import com.cusc.nirvana.user.rnr.mg.dto.RnrOrderDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.Calendar;
@Service
@Slf4j
@EnableScheduling
public class OrderScheduledService {
@Autowired
private IRnrService rnrService;
@Resource
private RnrOrderClient orderClient;
@Resource
private CacheFactory cacheFactory;
/**
* 定时任务,从数据库中获取已提交并,每隔5分钟执行一次
*/
//@Scheduled(fixedRateString = "${rnr.order.invalid:60000}")
public void execInvalidOrder() {
try {
cacheFactory.getLockService()
.lock(FpRedisConstant.ORDER_SCHEDULED_LOCK, FpRedisConstant.ORDER_SCHEDULED_LOCK_EXPIRE);
RnrOrderDTO orderDTO = new RnrOrderDTO();
orderDTO.setPageSize(1000);
orderDTO.setCurrPage(1);
orderDTO.setOrderStatus(RnrOrderStatusEnum.COMMIT.getCode());
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -1);
orderDTO.setCreateTime(calendar.getTime());
Response<PageResult<RnrOrderDTO>> orderPageResp = orderClient.queryByPage(orderDTO);
if (orderPageResp.isSuccess() && orderPageResp.getData() != null && !CollectionUtils.isEmpty(orderPageResp.getData().getList())) {
for(RnrOrderDTO order : orderPageResp.getData().getList()){
rnrService.updateRnrInValid(order);
}
}
} catch (CacheException e) {
log.error("OrderScheduledService execInvalidOrder lock ", e);
} finally {
try {
cacheFactory.getLockService().unLock(FpRedisConstant.ORDER_SCHEDULED_LOCK);
} catch (CacheException e) {
log.error("OrderScheduledService execInvalidOrder unlock ", e);
}
}
}
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -1);
System.out.println(calendar.getTime());
}
}
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