|
@@ -0,0 +1,150 @@
|
|
|
+package com.jihengbel.intelligent.applicationtask.init;
|
|
|
+
|
|
|
+import com.jihengbel.intelligent.applicationtask.common.CommonUtil;
|
|
|
+import com.jihengbel.intelligent.applicationtask.entry.OnsiteCalendar;
|
|
|
+import com.jihengbel.intelligent.applicationtask.service.OnsiteTaskService;
|
|
|
+import com.jihengbel.intelligent.applicationtask.websocket.WsSessionManager;
|
|
|
+import org.quartz.DisallowConcurrentExecution;
|
|
|
+import org.quartz.Job;
|
|
|
+import org.quartz.JobExecutionContext;
|
|
|
+import org.quartz.JobExecutionException;
|
|
|
+import org.springframework.web.socket.TextMessage;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+import java.util.concurrent.Callable;
|
|
|
+import java.util.concurrent.ConcurrentMap;
|
|
|
+import java.util.concurrent.FutureTask;
|
|
|
+
|
|
|
+/**
|
|
|
+ * onsite 提醒job
|
|
|
+ */
|
|
|
+@DisallowConcurrentExecution
|
|
|
+public class OnsiteRemindJob implements Job {
|
|
|
+ @Override
|
|
|
+ public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
|
|
|
+ ConcurrentMap<String, Object> paramMap = (ConcurrentMap<String, Object>) jobExecutionContext.getJobDetail().getJobDataMap().get(QuartzManager.JOB_PARAM_NAME);
|
|
|
+ createTask(paramMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建Task主方法
|
|
|
+ * @param paramMap
|
|
|
+ */
|
|
|
+ public void createTask(ConcurrentMap<String,Object> paramMap) {
|
|
|
+ Integer result=0;//没什么意义只是为了不出现整体并行
|
|
|
+ List< FutureTask<Integer>> tasks=new ArrayList<>();
|
|
|
+ tasks.add( getDayFutureTask(paramMap));
|
|
|
+ tasks.add( getWeekFutureTask(paramMap));
|
|
|
+ tasks.add( getMonthFutureTask(paramMap));
|
|
|
+ try{
|
|
|
+ for(FutureTask<Integer> t:tasks){
|
|
|
+ t.get();
|
|
|
+ }//等等所有线程结束
|
|
|
+ }catch (Throwable e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * day
|
|
|
+ * @param paramMap
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private FutureTask<Integer> getDayFutureTask(ConcurrentMap<String, Object> paramMap) {
|
|
|
+ HashMap param = new HashMap();
|
|
|
+ param.put("type_flag",0);
|
|
|
+ FutureTask<Integer> dayTask = new FutureTask<Integer>(new remindOnsite(paramMap,param));
|
|
|
+ Thread thread = new Thread(dayTask);
|
|
|
+ thread.start(); //开启线程
|
|
|
+ return dayTask;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * week
|
|
|
+ * @param paramMap
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private FutureTask<Integer> getWeekFutureTask(ConcurrentMap<String, Object> paramMap) {
|
|
|
+ HashMap param = new HashMap();
|
|
|
+ param.put("type_flag",1);
|
|
|
+ FutureTask<Integer> weekTask = new FutureTask<Integer>(new remindOnsite(paramMap,param));
|
|
|
+ Thread thread = new Thread(weekTask);
|
|
|
+ thread.start(); //开启线程
|
|
|
+ return weekTask;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * month
|
|
|
+ * @param paramMap
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private FutureTask<Integer> getMonthFutureTask(ConcurrentMap<String, Object> paramMap) {
|
|
|
+ HashMap param = new HashMap();
|
|
|
+ param.put("type_flag",2);
|
|
|
+ FutureTask<Integer> monthTask = new FutureTask<Integer>(new remindOnsite(paramMap,param));
|
|
|
+ Thread thread = new Thread(monthTask);
|
|
|
+ thread.start(); //开启线程
|
|
|
+ return monthTask;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发送提醒
|
|
|
+ */
|
|
|
+ public class remindOnsite implements Callable<Integer> {
|
|
|
+
|
|
|
+ private ConcurrentMap<String, Object> paramMap;
|
|
|
+ private HashMap paramQuery;
|
|
|
+
|
|
|
+
|
|
|
+ public remindOnsite(ConcurrentMap<String, Object> paramMap, HashMap paramQuery) {
|
|
|
+ this.paramMap = paramMap;
|
|
|
+ this.paramQuery = paramQuery;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Integer call() throws Exception {
|
|
|
+ OnsiteTaskService onsiteTaskService = (OnsiteTaskService) paramMap.get("onsiteTaskService");
|
|
|
+ List<OnsiteCalendar> cals = onsiteTaskService.getRemindWork(paramQuery);
|
|
|
+ String day = null;
|
|
|
+ String format = "yyyy-MM-dd HH:mm";
|
|
|
+ for (OnsiteCalendar cal : cals) {
|
|
|
+ if (cal.getStart_day() != null && cal.getStart_day().trim().length() > 0) {
|
|
|
+ day = cal.getTask_time() + " " + cal.getStart_day();
|
|
|
+ format = "yyyy-MM-dd HH:mm";
|
|
|
+ } else {
|
|
|
+ day = cal.getTask_time();
|
|
|
+ format = "yyyy-MM-dd";
|
|
|
+ }
|
|
|
+ boolean flag = CommonUtil.getDateCompare(CommonUtil.getStrDate(day, format, 0), new Date());
|
|
|
+ if (flag) {
|
|
|
+ String token =String.valueOf(cal.getUser_id());
|
|
|
+ if(WsSessionManager.SESSION_POOL.containsKey(token)){
|
|
|
+ try {
|
|
|
+ WsSessionManager.SESSION_POOL.get(token).
|
|
|
+ sendMessage(new TextMessage("你有一个新工作请及时处理"));
|
|
|
+ //update onsite_task set ${flag}=${flagVal} where id=${onsite_task_id}
|
|
|
+ Map<String,Object> qm=new HashMap<>();
|
|
|
+ qm.put("flag","remind_task_flag");
|
|
|
+ qm.put("flagVal",1);
|
|
|
+ qm.put("onsite_task_id",cal.getOnsite_task_id());
|
|
|
+ onsiteTaskService.updateOnsiteRemindFlag(qm);
|
|
|
+ }catch (Throwable e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|