Răsfoiți Sursa

如果处理过不再提醒周和月

guozx 3 ani în urmă
părinte
comite
9186679aa9

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

@@ -1,97 +1,167 @@
 package com.jihengbel.intelligent.applicationtask.common;
 
+import cn.hutool.core.date.DateTime;
+
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.WeekFields;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.Locale;
 
 public class CommonUtil {
 
     /**
      * 时间转字符串
+     *
      * @param date
      * @param format
      * @return
      */
-    public static String  getDateStr(Date date , String format){//"yyyy-MM-dd HH:mm:ss"
+    public static String getDateStr(Date date, String format) {//"yyyy-MM-dd HH:mm:ss"
         SimpleDateFormat sdf = new SimpleDateFormat(format);
         return sdf.format(date);
     }
 
     /**
      * 获取时间是星期几
+     *
      * @param date
      * @return
      */
     public static int getWeekOfDate(Date date) {
-        int[] weekDays = { 7, 1, 2, 3, 4,5, 6 };
+        int[] weekDays = {7, 1, 2, 3, 4, 5, 6};
         Calendar cal = Calendar.getInstance();
         cal.setTime(date);
         int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
-        return weekDays[w<0?0:w];
+        return weekDays[w < 0 ? 0 : w];
 
     }
 
     /**
      * 获取时间是这个月几号
+     *
      * @param date
      * @return
      */
     public static int getMonthOfDate(Date date) {
         Calendar newTime = Calendar.getInstance();
         newTime.setTime(date);
-        return  newTime.get(Calendar.DAY_OF_MONTH);
+        return newTime.get(Calendar.DAY_OF_MONTH);
     }
 
 
     /**
      * 添加多少分钟的时间
+     *
      * @param date
      * @param format
      * @param min
      * @return
      */
-    public static Date  getStrDate(String date , String format,int min) throws ParseException {//"yyyy-MM-dd HH:mm:ss"
+    public static Date getStrDate(String date, String format, int min) throws ParseException {//"yyyy-MM-dd HH:mm:ss"
         SimpleDateFormat sdf = new SimpleDateFormat(format);
-        Date current= sdf.parse(date);
+        Date current = sdf.parse(date);
         Calendar newTime = Calendar.getInstance();
         newTime.setTime(current);
-        newTime.add(Calendar.MINUTE,min);
+        newTime.add(Calendar.MINUTE, min);
         return newTime.getTime();
     }
 
     /**
-     *  获取当前时间是不是大野提醒时间大于需要提醒
+     * 获取当前时间是不是大野提醒时间大于需要提醒
+     *
      * @param changeTime
      * @param now
      * @return
      * @throws ParseException
      */
-    public static boolean  getDateCompare(Date changeTime , Date now , boolean flag) throws ParseException {
+    public static boolean getDateCompare(Date changeTime, Date now, boolean flag) throws ParseException {
         Calendar c1 = Calendar.getInstance();
         c1.setTime(changeTime);
         Calendar c2 = Calendar.getInstance();
         c2.setTime(now);
-        if(!flag){
-            if(c1.compareTo(c2)>0 ){
+        if (!flag) {
+            if (c1.compareTo(c2) > 0) {
                 return false;
-            }else{
+            } else {
                 return true;
             }
-        }else{
-            if(c1.compareTo(c2)==-1 ){
+        } else {
+            if (c1.compareTo(c2) == -1) {
                 return true;
-            }else{
+            } else {
                 return false;
             }
         }
 
     }
 
+    /**
+     * 获取指定月份的时间
+     *
+     * @param month
+     * @param maxday
+     * @return
+     */
+    public static String[] getDayForMonthAndDay(Date date, int maxday) {
+        String[] time=new String[2];
+        Calendar end = Calendar.getInstance();
+        end.setTime(date);
+        int lastDay = 0;
+        if (end.get(Calendar.MONTH)+1 == 2) {
+            lastDay = end.getLeastMaximum(Calendar.DAY_OF_MONTH);
+        } else {
+            lastDay = end.getActualMaximum(Calendar.DAY_OF_MONTH);
+        }
+        if (maxday <= lastDay) {
+            lastDay = maxday;
+        }
+        end.set(Calendar.DAY_OF_MONTH, lastDay);
 
+        Calendar start = Calendar.getInstance();
+        start.setTime(date);
+        start.set(Calendar.DAY_OF_MONTH, 1);
+        // 格式化日期
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        time[0]=sdf.format(start.getTime());
+        time[1]=sdf.format(end.getTime());
+        return time;
+    }
 
 
+    /**
+     * 获取一周的前后时间
+     * @param date
+     * @return
+     */
+    public static String[] getWeekStartEnd(Date date) {
+        String[] time=new String[2];
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        int c = getWeekOfDate(date);
+        Calendar begin = Calendar.getInstance();
+        begin.setTime(date);
+        Calendar end = Calendar.getInstance();
+        end.setTime(date);
+        begin.add(Calendar.DAY_OF_MONTH, -(c - 1));
+        time[0]=sdf.format(begin.getTime());
+        end.add(Calendar.DAY_OF_MONTH, (7-c));
+        time[1]=sdf.format(end.getTime());
+        return time;
+    }
+
     public static void main(String[] args) throws ParseException {
-     //   getDateCompare(getStrDate("2011-11-11 10:00" , "yyyy-MM-dd HH:mm",120) , new Date());
+
+        Calendar calendar = Calendar.getInstance();
+        int c = getWeekOfDate(calendar.getTime());
+//        calendar.add(Calendar.DAY_OF_MONTH, -(c - 1));
+        System.out.println(calendar.getTime());
+        calendar.add(Calendar.DAY_OF_MONTH, (7-c));
+        System.out.println(calendar.getTime());
+//        calendar.add(Calendar.DAY_OF_MONTH, -(c - 1));
+
     }
 }

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

@@ -1,5 +1,6 @@
 package com.jihengbel.intelligent.applicationtask.init;
 
+import cn.hutool.core.collection.CollUtil;
 import com.jihengbel.intelligent.applicationtask.common.CommonUtil;
 import com.jihengbel.intelligent.applicationtask.entry.OnsiteCalendar;
 import com.jihengbel.intelligent.applicationtask.entry.OnsiteTask;
@@ -11,10 +12,7 @@ import org.quartz.JobExecutionException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
+import java.util.*;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.ExecutionException;
@@ -123,15 +121,44 @@ public class OnsiteTaskJob implements Job {
 
         @Override
         public Integer call() throws Exception {
+            Date cur=new Date();
             OnsiteTaskService onsiteTaskService = (OnsiteTaskService) paramMap.get("onsiteTaskService");
-            String td = CommonUtil.getDateStr(new Date(), "yyyy-MM-dd");
+            String td = CommonUtil.getDateStr(cur, "yyyy-MM-dd");
             List<OnsiteCalendar> cals = onsiteTaskService.getCalenderOnsitesForType(paramQuery);
             for (OnsiteCalendar cal : cals) {
                 try {
-                    OnsiteTask task = new OnsiteTask();
-                    task.setTask_time(td);
-                    task.setOnsite_calendar_id(cal.getId());
-                    onsiteTaskService.insertOnsiteTask(task);
+                    boolean flag = false;
+                    Map qMap = new HashMap<>();
+                    if (cal.getType_flag() == 1) {
+                        String[] t = CommonUtil.getWeekStartEnd(cur);//当前时间周的开始结束时间
+                        qMap.put("onsite_calendar_id",cal.getId());
+                        qMap.put("start",t[0]);
+                        qMap.put("end",t[1]);
+                       int count= onsiteTaskService.getTaskExistCount(qMap);
+                       if(count<=0){
+                           flag = true;
+                       }
+                    } else if (cal.getType_flag() == 2) {
+                        String[] t = CommonUtil.getDayForMonthAndDay(cur,cal.getMonth_day());//当前时间周的开始结束时间
+                        qMap.put("onsite_calendar_id",cal.getId());
+                        qMap.put("start",t[0]);
+                        qMap.put("end",t[1]);
+                        int count= onsiteTaskService.getTaskExistCount(qMap);
+                        if(count<=0){
+                            flag = true;
+                        }
+                    } else {
+                        flag = true;
+                    }
+
+                    if (flag) {
+                        OnsiteTask task = new OnsiteTask();
+                        task.setTask_time(td);
+                        task.setOnsite_calendar_id(cal.getId());
+                        onsiteTaskService.insertOnsiteTask(task);
+                    }
+
+
                 } catch (Throwable e) {
                     log.error(e.getStackTrace().toString());
                 }

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

@@ -14,6 +14,9 @@ import java.util.Map;
 public interface OnsiteTaskMapper {
 
 
+
+    public int getTaskExistCount(Map map);
+
     public int delTaskOld(Map map);
 
     /**

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

@@ -8,6 +8,9 @@ import java.util.List;
 import java.util.Map;
 
 public interface OnsiteTaskService {
+
+    public int getTaskExistCount(Map map);
+
     public int delTaskOld(Map map);
     /**
      * 添加不工作提醒信息

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

@@ -22,6 +22,10 @@ public class OnsiteTaskServiceImp implements OnsiteTaskService {
     @Autowired
     OnsiteTaskMapper mapper;
 
+    public int getTaskExistCount(Map map){
+        return mapper.getTaskExistCount(map);
+    }
+
     public int delTaskOld(Map map){
         return mapper.delTaskOld(map);
     }

+ 6 - 0
application-task/src/main/resources/mappers/OnsiteTaskMapper.xml

@@ -98,6 +98,12 @@
 
     </select>
 
+    <select id="getTaskExistCount" resultType="int">
+       select count(*)  from   onsite_task
+       where onsite_calendar_id=${onsite_calendar_id} and task_time &gt;= #{start} and task_time &lt;= #{end}
+       and status!=0
+    </select>
+
     <delete id="delTaskOld">
         delete
         from onsite_task