InsuranceConsumer.java 3.44 KB
package cn.fw.valhalla.component;

import cn.fw.angel.sdk.result.InsuOrderMqDTO;
import cn.fw.valhalla.common.utils.DateUtil;
import cn.fw.valhalla.domain.db.OriginalData;
import cn.fw.valhalla.domain.db.customer.Customer;
import cn.fw.valhalla.sdk.enums.DataTypeEnum;
import cn.fw.valhalla.service.data.CustomerService;
import cn.fw.valhalla.service.data.OriginalDataService;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.sql.Timestamp;
import java.util.Date;
import java.util.Objects;

/**
 * @author : kurisu
 * @className : InsuranceConsumer
 * @description : 购买保险mq
 * @date: 2021-06-15 10:08
 */

@Slf4j
@Component
@RocketMQMessageListener(topic = "insurance_purchase_result", consumerGroup = "${spring.application.name}" + "-insurance_purchase_result")
public class InsuranceConsumer implements RocketMQListener<InsuOrderMqDTO> {
    private final OriginalDataService originalDataService;
    private final CustomerService customerService;

    @Autowired
    public InsuranceConsumer(final OriginalDataService originalDataService,
                             final CustomerService customerService) {
        this.originalDataService = originalDataService;
        this.customerService = customerService;
    }

    @Override
    public void onMessage(InsuOrderMqDTO t) {
        log.info("监听保险上传记录mq: InsuOrderMqDTO=[{}]", JSONObject.toJSONString(t));
        Customer customer = customerService.queryByFrameNo(t.getVin(), t.getGroupId());
        if (Objects.isNull(customer)) {
            log.error("处理保险MQ失败: 档案不存在");
            return;
        }
        dealData(t, customer);
    }

    @Transactional(rollbackFor = Exception.class)
    public void dealData(InsuOrderMqDTO t, Customer customer) {
        OriginalData originalData = originalDataService.getOne(Wrappers.<OriginalData>lambdaQuery()
                .eq(OriginalData::getType, DataTypeEnum.BI)
                .eq(OriginalData::getDetailId, t.getOrderNo())
        );
        if (Objects.nonNull(originalData)) {
            return;
        }
        originalData = new OriginalData();

        if (1 == t.getInsuranceType() || 2 == t.getInsuranceType()) {
            Date startTime = t.getStartTime();
            String detaId = t.getInsuOrderNo();

            Timestamp insExpireTime = DateUtil.getExpiredYear(startTime, 1);
            customer.setInsuranceExpires(insExpireTime);
            customerService.updateById(customer);

            originalData.setType(DataTypeEnum.BI);
            originalData.setCustomerId(customer.getId());
            originalData.setPlateNo(customer.getPlateNo());
            originalData.setUserId(t.getUploaderId());
            originalData.setGenerateTime(insExpireTime);
            originalData.setDetailId(detaId);
            originalData.setSolved(Boolean.FALSE);
            originalData.setShopId(t.getShopId());
            originalData.setGroupId(t.getGroupId());
            originalData.setCreateTime(new Date());
            originalData.setUpdateTime(new Date());
            originalDataService.save(originalData);
        }

    }
}