/**@author Sherlock_yb * Created time:2014年12月2日 */ package nlp.whu.utils; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.PriorityBlockingQueue; import java.util.concurrent.TimeUnit; import org.apache.log4j.Logger; import nlp.whu.focus.FocusPool; import nlp.whu.model.SubjectDetail; import nlp.whu.model.TaskProducer; /**@description: */ public class TaskProducerColumnFocus implements TaskProducer{ private static final Logger log = Log4jUtil.getInstance().getLogger(TaskProducerSubjectFocus.class); private static final long ONE_MINUTE_MS = TimeUnit.MINUTES.toMillis(1L); private PriorityBlockingQueue taskQueue; private Date startDate; private int subjectAnalysisInteval = LoadFocusPath.subjectAnalysisInteval; private boolean initialStart = true; public TaskProducerColumnFocus(PriorityBlockingQueue taskQueue , Date startDate){ this.taskQueue = taskQueue; this.startDate = startDate; } public void wrapperTask(){ if(initialStart){ log.info("wrapperTask initial start, construct initial task list."); List sdList = FocusPool.subjectDetailDao.getSubjectDetailList(); Map> userSubjectTypesMap = FocusPool.subjectDetailDao.getUserSubjectTypesMap(sdList); for(Integer userId : userSubjectTypesMap.keySet()){ Set subjectTypes = userSubjectTypesMap.get(userId); for(Integer subjectTypeId : subjectTypes){ TaskWrapperColumnFocus tw = new TaskWrapperColumnFocus(); tw.setUserId(userId); tw.setSubjectTypeId(subjectTypeId); addTask(tw); } } initialStart = false; }else{ long now = System.currentTimeMillis(); long startTime = startDate.getTime(); long gap = (now - startTime) / (ONE_MINUTE_MS); if(gap > 0 && gap % subjectAnalysisInteval == 0){ List sdList = FocusPool.subjectDetailDao.getSubjectDetailList(); Map> userSubjectTypesMap = FocusPool.subjectDetailDao.getUserSubjectTypesMap(sdList); for(Integer userId : userSubjectTypesMap.keySet()){ Set subjectTypes = userSubjectTypesMap.get(userId); for(Integer subjectTypeId : subjectTypes){ TaskWrapperColumnFocus tw = new TaskWrapperColumnFocus(); tw.setUserId(userId); tw.setSubjectTypeId(subjectTypeId); addTask(tw); } } } } } public void addTask(TaskWrapperColumnFocus taskWrapper){ taskQueue.put(taskWrapper); log.info("add one task, info: " + taskWrapper); } @Override public void run() { while(true){ wrapperTask(); try { //gap的单位为min,故只能每1min检测一次当前系统时间 log.info("try to sleep 1 min, check the system time every 1 min."); TimeUnit.MINUTES.sleep(1); } catch (InterruptedException e) { log.info("stop sleep", e); } } } }