AuthVehicleConsumer.java 3.97 KB
package cn.fw.valhalla.component;

import cn.fw.identify.sdk.api.mq.AuthDataEvent;
import cn.fw.valhalla.common.utils.*;
import cn.fw.valhalla.domain.dto.NewVehicleDTO;
import cn.fw.valhalla.rpc.member.MemberRpcService;
import cn.fw.valhalla.rpc.member.dto.MemberUserDTO;
import cn.fw.valhalla.sdk.enums.CarUseTypeEnum;
import cn.fw.valhalla.service.bus.cust.MemberVehicleBizService;
import com.alibaba.fastjson.JSON;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.Objects;


/**
 * 监听认证mq
 * @author xiatian
 */
@Slf4j
@Component
@RocketMQMessageListener(topic = "auth_data_event", consumerGroup = "${spring.application.name}" + "-auth_data_event")
public class AuthVehicleConsumer implements RocketMQListener<AuthDataEvent> {

    private MemberRpcService memberRpcService;

    private MemberVehicleBizService memberVehicleBizService;

    public AuthVehicleConsumer(final MemberRpcService memberRpcService, final MemberVehicleBizService memberVehicleBizService) {
        this.memberRpcService = memberRpcService;
        this.memberVehicleBizService = memberVehicleBizService;
    }

    @Override
    public void onMessage(AuthDataEvent t) {
        log.info("监听认证mq: AuthDataEvent=[{}]", t);
        try {
            String identifyCode = "NS9k";
            if(identifyCode.equals(t.getIdentifyCode())){
                return;
            }
            if(StringUtils.isEmpty(t.getVin())){
                log.error("认证mq的vin为空");
            }
            //保存车辆认证信息
            memberVehicleBizService.saveVehicle(with(JSON.parseObject(t.getExtraData(),VehicleData.class),t));
        } catch (Exception ex) {
            log.error("消费关注公众号mq失败,原因:{}", JSON.toJSONString(ex));
        }
    }

    @Data
    private static class VehicleData{
        private String plateNum;

        private String vehicleType;

        private String owner;

        private String addr;

        private String useCharacter;

        private String model;

        private String vin;

        private String engineNum;

        private String registerDate;

        private String issueDate;

        private String fileNo;

        private String approvedPassengerCapacity;

        private String grossMass;

        private String unladenMass;

        private String approvedLoad;

        private String overallDimension;

        private String tractionMass;

        private String inspectionRecord;
    }

    private NewVehicleDTO with(VehicleData vehicleData,AuthDataEvent t){
        MemberUserDTO member = memberRpcService.user(t.getMemberId());
        String brandName = StringUtils.matchFirst(vehicleData.getModel(),"[\\u4e00-\\u9fa5]+",0);
        if(Objects.isNull(brandName)){
            log.error("未匹配行驶证品牌");
            return null;
        }
        CarUseTypeEnum useType = CarUseTypeEnum.ofName(vehicleData.getUseCharacter());
        if(Objects.isNull(useType)){
            log.error("未匹配行驶证使用性质");
            return null;
        }
        Date regDate = DateUtil.parse1(vehicleData.registerDate);
        NewVehicleDTO newVehicle = new NewVehicleDTO();
        newVehicle.setMemberId(t.getMemberId());
        newVehicle.setMemberName(Objects.nonNull(member) ? member.getRealName() : null);
        newVehicle.setUseType(useType.getValue());
        newVehicle.setCusType(t.getVehicleType());
        newVehicle.setBrandName(brandName);
        newVehicle.setEngineNo(vehicleData.getEngineNum());
        newVehicle.setPlateNo(vehicleData.getPlateNum());
        newVehicle.setFrameNo(vehicleData.getVin());
        newVehicle.setName(vehicleData.getOwner());
        newVehicle.setRegDate(regDate);
        newVehicle.setSpecCode(vehicleData.getModel().replace(brandName,""));
        return newVehicle;
    }
}