package com.docus.server.collect.user.ws;

import com.docus.log.annotation.TrackRetryListener;
import com.docus.server.collect.ICollector;
import com.docus.server.collect.web.job.AbstractCollectJob;
import com.docus.server.entity.TaskConfig;
import com.docus.server.sys.common.pojo.dto.UserDTO;
import com.docus.server.util.PeriodTime;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.List;

/**
 * 主动webservice请求用户数据job
 *
 * @see AbstractCollectJob
 * @see com.docus.server.collect.IJob
 */
@Component
public class UserWsCollectJob extends AbstractCollectJob<UserDTO> {
    @Resource(name = "wsUserCollectorImpl")
    private ICollector collector;

    /**
     * xxl jobhandler 手工执行
     */
    @XxlJob("startAllUserWsCollect")
    @TrackRetryListener("startAllUserWsCollect")
    public void startAllUserWsCollect(String param) {
        super.startCollectAll(getJobParam(param));
    }

    /**
     * xxl jobhandler 配置定时启动，如果未完成任务跳过。
     */
    @XxlJob("startIncUserWsCollect")
    @TrackRetryListener("startIncUserWsCollect")
    public void startIncUserWsCollect(String param) {
        super.startCollectIncrement(getJobParam(param));
    }

    @Override
    public void doHandle(List<UserDTO> results, String param) {
        userService.batchInsertOrUpdatePowerUser(results);
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<UserDTO> execute(PeriodTime periodTime, TaskConfig taskConfig) {
        //需要根据不同医院去解析不同的内容。使用接口实现的方式。
        return collector.page(periodTime, taskConfig);
    }
}
