瀏覽代碼

httpclient 是为了微信小程序端的下发提醒使用

cr7118@sina.cn 3 年之前
父節點
當前提交
10f14861c9

+ 3 - 3
application-task/src/main/java/com/jihengbel/intelligent/applicationtask/common/CommonUtil.java

@@ -72,10 +72,10 @@ public class CommonUtil {
         c1.setTime(changeTime);
         Calendar c2 = Calendar.getInstance();
         c2.setTime(now);
-        if(c1.compareTo(c2)==-1){
-            return true;
-        }else{
+        if(c1.compareTo(c2)>0 ){
             return false;
+        }else{
+            return true;
         }
     }
 

+ 150 - 0
application-task/src/main/java/com/jihengbel/intelligent/applicationtask/init/OnsiteRemindJob.java

@@ -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;
+        }
+    }
+
+}

+ 1 - 1
application-task/src/main/java/com/jihengbel/intelligent/applicationtask/init/OnsiteTaskJob.java

@@ -22,7 +22,7 @@ import java.util.concurrent.FutureTask;
 
 
 /**
- * 生产任务job
+ * onsite生产任务job
  */
 @DisallowConcurrentExecution
 public class OnsiteTaskJob implements Job {

+ 34 - 2
application-task/src/main/java/com/jihengbel/intelligent/applicationtask/init/TimerTaskInit.java

@@ -3,6 +3,7 @@ package com.jihengbel.intelligent.applicationtask.init;
 import com.jihengbel.intelligent.applicationtask.service.OnsiteTaskService;
 import org.quartz.Scheduler;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.scheduling.quartz.SchedulerFactoryBean;
 import org.springframework.stereotype.Component;
@@ -16,7 +17,11 @@ import java.util.concurrent.ConcurrentMap;
 @Component
 public class TimerTaskInit implements CommandLineRunner {
 
-    //    @Resource(name="onsiteTaskServiceImp")
+    @Value("${onsite.task.cron}")
+    private String cron_1;
+    @Value("${onsite.remind.work.cron}")
+    private String cron_2;
+
     @Autowired
     OnsiteTaskService onsiteTaskService;
 
@@ -28,12 +33,39 @@ public class TimerTaskInit implements CommandLineRunner {
         ConcurrentMap<String, Object> param = new ConcurrentHashMap<String, Object>();
         param.put("onsiteTaskService", onsiteTaskService);
         Scheduler sche = schedulerFactoryBean.getScheduler();
+        addOnsiteTask(param, sche);
+    }
+
+    /**
+     *  添加onsit任务的定时器
+     * @param param
+     * @param sche
+     */
+    private void addOnsiteTask(ConcurrentMap<String, Object> param, Scheduler sche) {
         JobFactoryParam onsite =new JobFactoryParam();
         onsite.setJobGroupName(QuartzManager.JOB_GROUP_NAME);
         onsite.setJobName("onsiteTask");
         onsite.setParamMap(param);
-        onsite.setTriggerRule("0 */1 * * * ?");
+        onsite.setTriggerRule(cron_1);//"0 */1 * * * ?" 这个用于测试一分钟一次
         onsite.setClazz(OnsiteTaskJob.class);
         QuartzManager.addJob(sche, onsite);
     }
+
+
+    /**
+     *  添加onsit工作提醒
+     * @param param
+     * @param sche
+     */
+    private void addOnsiteRemindWork(ConcurrentMap<String, Object> param, Scheduler sche) {
+        JobFactoryParam onsite =new JobFactoryParam();
+        onsite.setJobGroupName(QuartzManager.JOB_GROUP_NAME);
+        onsite.setJobName("onsiteRemindWork");
+        onsite.setParamMap(param);
+        onsite.setTriggerRule(cron_2);//"0 */1 * * * ?" 这个用于测试一分钟一次
+        onsite.setClazz(OnsiteRemindJob.class);
+        QuartzManager.addJob(sche, onsite);
+    }
+
+
 }

+ 9 - 0
application-task/src/main/java/com/jihengbel/intelligent/applicationtask/model/OnsiteTaskMapper.java

@@ -34,6 +34,15 @@ public interface OnsiteTaskMapper {
     public List<OnsiteCalendar> getRemindWork(Map<String,Object> param);
 
 
+    /**
+     *  更新提醒状态,不太好的写法但是符合现在的需求
+     * @param param
+     * @return
+     */
+    public int updateOnsiteRemindFlag(Map<String,Object> param);
+
+
+
 
 
 }

+ 16 - 0
application-task/src/main/java/com/jihengbel/intelligent/applicationtask/service/OnsiteTaskService.java

@@ -24,4 +24,20 @@ public interface OnsiteTaskService {
     public List<OnsiteCalendar> getCalenderOnsitesForType(Map<String,Object> param);
 
 
+    /**
+     * 需要提醒的工作
+     * @param param
+     * @return
+     */
+    public List<OnsiteCalendar> getRemindWork(Map<String,Object> param);
+
+
+    /**
+     *  更新提醒状态,不太好的写法但是符合现在的需求
+     * @param param
+     * @return
+     */
+    public int updateOnsiteRemindFlag(Map<String,Object> param);
+
+
 }

+ 18 - 0
application-task/src/main/java/com/jihengbel/intelligent/applicationtask/service/impl/OnsiteTaskServiceImp.java

@@ -32,4 +32,22 @@ public class OnsiteTaskServiceImp implements OnsiteTaskService {
     public List<OnsiteCalendar> getCalenderOnsitesForType(Map<String,Object> param){
         return mapper.getCalenderOnsitesForType(param);
     }
+
+    /**
+     * 需要提醒的工作
+     * @param param
+     * @return
+     */
+    public List<OnsiteCalendar> getRemindWork(Map<String,Object> param){
+        return mapper.getRemindWork(param);
+    }
+
+    /**
+     *  更新提醒状态,不太好的写法但是符合现在的需求
+     * @param param
+     * @return
+     */
+    public int updateOnsiteRemindFlag(Map<String,Object> param){
+        return mapper.updateOnsiteRemindFlag(param);
+    }
 }

+ 5 - 0
application-task/src/main/resources/application.properties

@@ -23,3 +23,8 @@ spring.datasource.druid.test-while-idle=false
 
 mybatis.mapperLocations=classpath:mappers/*.xml
 mybatis.config-locations=conf/mybatis-config.xml
+
+#每日执行job时间 每日2点用于执行onsite任务的生成
+onsite.task.cron=0 0 2 * * ?
+#onsite 工作提醒
+onsite.remind.work.cron=0 */5 * * * ? 

+ 4 - 1
application-task/src/main/resources/mappers/OnsiteTaskMapper.xml

@@ -36,9 +36,12 @@
     <select id="getRemindWork" resultMap="calendarOnsite">
         select b.*,a.task_time ,a.id onsite_task_id
         from onsite_task a,onsite_calendar b
-        where a.onsite_calendar_id=b.id and a.status=0
+        where a.onsite_calendar_id=b.id and a.status=0 and b.type_flag=${type_flag}
     </select>
 
+    <update id="updateOnsiteRemindFlag" >
+        update  onsite_task set ${flag}=${flagVal} where id=${onsite_task_id}
+    </update>