FollowApiBizService.kt 3.76 KB
package cn.fw.valhalla.service.bus.follow;

import cn.fw.valhalla.domain.db.customer.AccidentPool
import cn.fw.valhalla.domain.db.follow.ClueTask
import cn.fw.valhalla.domain.db.follow.FollowClue
import cn.fw.valhalla.domain.enums.ClueStatusEnum
import cn.fw.valhalla.domain.enums.FollowTypeEnum
import cn.fw.valhalla.domain.enums.TaskStateEnum
import cn.fw.valhalla.domain.query.BeCompletedQuery
import cn.fw.valhalla.sdk.param.ShouldBeCompletedQuery
import cn.fw.valhalla.sdk.result.ShouldBeCompletedResult
import cn.fw.valhalla.service.data.AccidentPoolService
import cn.fw.valhalla.service.data.ClueTaskService
import cn.fw.valhalla.service.data.FollowClueService
import com.baomidou.mybatisplus.core.toolkit.Wrappers
import org.springframework.stereotype.Service
import java.util.*

/**
 * 跟进api接口业务实现
 *
 * @author : kurisu
 * @version : 1.0
 * @className : FollowApiBizService
 * @description : 跟进api接口业务实现
 * @date : 2022-10-20 14:35
 */
@Service
class FollowApiBizService(
    val clueTaskService: ClueTaskService,
    val accidentPoolService: AccidentPoolService,
    val followClueService: FollowClueService
) {


    /**
     * 查询已成交续保数据
     *
     * @param query
     * @param followTypeEnum
     * @return
     */
    fun queryCompletedGuys(
        query: ShouldBeCompletedQuery,
        followTypeEnum: FollowTypeEnum
    ): List<ShouldBeCompletedResult> {
        val search = BeCompletedQuery()
        search.type = followTypeEnum.value
        search.shopId = query.shopId
        search.userId = query.userId
        search.startTime = query.startTime
        search.endTime = query.endTime
        val dtoList = clueTaskService.queryShouldBeCompleted(search)
        return dtoList
            .filter { TaskStateEnum.COMPLETE.value.equals(it.state) }
            .map {
                ShouldBeCompletedResult(
                    it.vin,
                    it.userId,
                    it.userName,
                    it.shopId,
                    it.state
                )
            }
    }

    /**
     * 查询应成交台数
     *
     * @param query
     * @param followTypeEnum
     * @return
     */
    fun queryShouldBeCompleted(
        query: ShouldBeCompletedQuery,
        followTypeEnum: FollowTypeEnum
    ): List<ShouldBeCompletedResult> {
        val search = BeCompletedQuery(
            query.userId,
            query.shopId,
            query.startTime,
            query.endTime,
            followTypeEnum.value
        )
        val dtoList = clueTaskService.queryShouldBeCompleted(search)
        return dtoList.map {
            ShouldBeCompletedResult(
                it.vin,
                it.userId,
                it.userName,
                it.shopId,
                it.state
            )
        }
    }

    fun queryAccidentFollowerByPlate(plateNo: String, groupId: Long): ClueTask? {
        val lastOne = accidentPoolService.getOne(
            Wrappers.lambdaQuery<AccidentPool>()
                .eq(AccidentPool::getPlateNo, plateNo)
                .eq(AccidentPool::getGroupId, groupId)
                .orderByDesc(AccidentPool::getCreateTime)
                .last(" limit 1 ")
        )

        if (Objects.isNull(lastOne)) {
            return null
        }
        val lastOngoingClue = followClueService.getOne(
            Wrappers.lambdaQuery<FollowClue>()
                .eq(FollowClue::getPlateNo, plateNo)
                .eq(FollowClue::getClueType, FollowTypeEnum.AC)
                .eq(FollowClue::getClueState, ClueStatusEnum.ONGOING)
                .eq(FollowClue::getGroupId, groupId)
                .last(" limit 1 ")
        );

        if (Objects.isNull(lastOngoingClue)) {
            return null;
        }
        return clueTaskService.queryOngoingTaskByClueId(lastOngoingClue.id);
    }
}