ClueFromPublicListener.java 2.67 KB
package cn.fw.valhalla.service.bus.listener;

import cn.fw.valhalla.domain.db.pub.PubCluePool;
import cn.fw.valhalla.domain.enums.PubStandType;
import cn.fw.valhalla.domain.enums.PublicClueStateEnum;
import cn.fw.valhalla.service.bus.pub.PubDistributeBizService;
import cn.fw.valhalla.service.event.ClueFromPublicEvent;
import com.alibaba.fastjson.JSONObject;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.event.EventListener;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import java.time.LocalDate;

/**
 * 产生线索建立专属线索监听
 *
 * @author : kurisu
 * @version : 2.0
 * @className : ClueFromPublicListener
 * @description : 产生线索建立专属线索监听
 * @date : 2023-04-26 11:05
 */

@Component
@Slf4j
public class ClueFromPublicListener {
    private final PubDistributeBizService pubDistributeBizService;
    private final StringRedisTemplate stringRedisTemplate;

    @Value("${spring.cache.custom.global-prefix}:pub:distribute:fromClue")
    @Getter(AccessLevel.PRIVATE)
    private String cacheKey;

    @Autowired
    public ClueFromPublicListener(final PubDistributeBizService pubDistributeBizService,
                                  final StringRedisTemplate stringRedisTemplate) {
        this.pubDistributeBizService = pubDistributeBizService;
        this.stringRedisTemplate = stringRedisTemplate;
    }


    /**
     * 跟进线索产生时档案建立专属线索关系
     *
     * @param event
     */
    @EventListener(ClueFromPublicEvent.class)
    public void stopTaskAndAddPublic(final ClueFromPublicEvent event) {
        final String vin = event.getVin();
        final Long shopId = event.getShopId();
        final Long groupId = event.getShopId();
        final Long userId = event.getUserId();
        final PubStandType type = event.getType();

        final PubCluePool pool = new PubCluePool();
        pool.setVin(vin);
        pool.setStartTime(LocalDate.now());
        pool.setState(PublicClueStateEnum.ONGOING);
        pool.setBegun(Boolean.FALSE);
        pool.setSourceType(type);
        pool.setAdviserId(userId);
        pool.setShopId(shopId);
        pool.setGroupId(groupId);
        try {
            pubDistributeBizService.distributeFromClue(pool);
        } catch (Exception e) {
            stringRedisTemplate.opsForList().rightPush(getCacheKey(), JSONObject.toJSONString(pool));
            log.error("跟进线索产生时档案建立专属线索关系失败", e);
        }
    }
}