FollowStrategy.java 3.06 KB
package cn.fw.valhalla.service.bus.follow.strategy;

import cn.fw.valhalla.domain.db.OriginalData;
import cn.fw.valhalla.domain.db.follow.ClueTask;
import cn.fw.valhalla.domain.db.follow.FollowClue;
import cn.fw.valhalla.domain.enums.FollowTypeEnum;
import cn.fw.valhalla.domain.enums.SettingUnitEnum;
import cn.fw.valhalla.domain.vo.setting.SettingVO;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * @author : kurisu
 * @className : FollowStrategy
 * @description : 跟进策略接口
 * @date: 2020-08-14 10:10
 */
public interface FollowStrategy {
    /**
     * 获取类型
     *
     * @return
     */
    FollowTypeEnum getFollowType();

    /**
     * 元数据生成任务
     *
     * @param originalData
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    boolean origin2task(OriginalData originalData);

    /**
     * 开始线索
     *
     * @param followClue
     */
    @Transactional(rollbackFor = Exception.class)
    void startClue(FollowClue followClue);

    /**
     * 设置变动时更新跟进任务
     *
     * @param setting
     * @param groupId
     */
    void settingChanged(List<SettingVO> setting, Long groupId);

    /**
     * 档案进入公共池时强制结束任务
     *
     * @param clue
     */
    @Transactional(rollbackFor = Exception.class)
    void forceStopClue(FollowClue clue);

    /**
     * [任务截止日期定时任务] 结束任务
     *
     * @param task
     */
    @Transactional(rollbackFor = Exception.class)
    void closeTask(ClueTask task);

    /**
     * [角色变动]结束任务
     *
     * @param task
     */
    @Transactional(rollbackFor = Exception.class)
    void onRoleChangeCloseTask(ClueTask task);

    /**
     * 强制结束任务
     * 审批终止 续保/事故车 任务
     *
     * @param task
     */
    @Transactional(rollbackFor = Exception.class)
    void forceStopTask(ClueTask task);

    /**
     * 当跟进待办结束(包括完成和逾期)
     *
     * @param task
     * @param preRecordId
     * @param originTime
     * @param overdue
     */
    @Transactional(rollbackFor = Exception.class)
    void onFollowComplete(ClueTask task, Long preRecordId, LocalDate originTime, boolean overdue);

    /**
     * 创建下次跟进待办
     *
     * @param clue
     */
    @Transactional(rollbackFor = Exception.class)
    void createNextFollowTodo(FollowClue clue);

    /**
     * 任务结束同步状态到跟进系统
     *
     * @param task
     */
    @Transactional(rollbackFor = Exception.class)
    void syncEndTask(ClueTask task);


    default LocalDateTime calTime(LocalDateTime baseTime, SettingUnitEnum unit, long value) {
        switch (unit) {
            case HOUR:
                return baseTime.plusHours(value);
            case MONTH:
                return baseTime.plusMonths(value);
            case MINUTE:
                return baseTime.plusMinutes(value);
            default:
                return baseTime.plusDays(value);
        }
    }
}