LIVE_YE преди 2 години
родител
ревизия
28a7b0c67d

+ 4 - 0
ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java

@@ -3,12 +3,16 @@ package com.ruoyi;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
 /**
  * 启动程序
  * 
  * @author ruoyi
  */
+@EnableAsync
+@EnableScheduling
 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
 public class RuoYiApplication
 {

+ 74 - 50
ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java

@@ -8,16 +8,18 @@ import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Calendar;
 import java.util.Date;
+
 import org.apache.commons.lang3.time.DateFormatUtils;
 
 /**
  * 时间工具类
- * 
+ *
  * @author ruoyi
  */
-public class DateUtils extends org.apache.commons.lang3.time.DateUtils
-{
+public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
     public static String YYYY = "yyyy";
 
     public static String YYYY_MM = "yyyy-MM";
@@ -31,66 +33,56 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     public static String YYYYMMDD = "yyyyMMdd";
 
     private static String[] parsePatterns = {
-            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", 
+            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
             "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
             "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
 
     public static String getDateNow() {
         return dateTimeNow(YYYYMMDD);
     }
+
     /**
      * 获取当前Date型日期
-     * 
+     *
      * @return Date() 当前日期
      */
-    public static Date getNowDate()
-    {
+    public static Date getNowDate() {
         return new Date();
     }
 
     /**
      * 获取当前日期, 默认格式为yyyy-MM-dd
-     * 
+     *
      * @return String
      */
-    public static String getDate()
-    {
+    public static String getDate() {
         return dateTimeNow(YYYY_MM_DD);
     }
 
-    public static final String getTime()
-    {
+    public static final String getTime() {
         return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
     }
 
-    public static final String dateTimeNow()
-    {
+    public static final String dateTimeNow() {
         return dateTimeNow(YYYYMMDDHHMMSS);
     }
 
-    public static final String dateTimeNow(final String format)
-    {
+    public static final String dateTimeNow(final String format) {
         return parseDateToStr(format, new Date());
     }
 
-    public static final String dateTime(final Date date)
-    {
+    public static final String dateTime(final Date date) {
         return parseDateToStr(YYYY_MM_DD, date);
     }
 
-    public static final String parseDateToStr(final String format, final Date date)
-    {
+    public static final String parseDateToStr(final String format, final Date date) {
         return new SimpleDateFormat(format).format(date);
     }
 
-    public static final Date dateTime(final String format, final String ts)
-    {
-        try
-        {
+    public static final Date dateTime(final String format, final String ts) {
+        try {
             return new SimpleDateFormat(format).parse(ts);
-        }
-        catch (ParseException e)
-        {
+        } catch (ParseException e) {
             throw new RuntimeException(e);
         }
     }
@@ -98,8 +90,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 日期路径 即年/月/日 如2018/08/08
      */
-    public static final String datePath()
-    {
+    public static final String datePath() {
         Date now = new Date();
         return DateFormatUtils.format(now, "yyyy/MM/dd");
     }
@@ -107,8 +98,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 日期路径 即年/月/日 如20180808
      */
-    public static final String dateTime()
-    {
+    public static final String dateTime() {
         Date now = new Date();
         return DateFormatUtils.format(now, "yyyyMMdd");
     }
@@ -116,18 +106,13 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 日期型字符串转化为日期 格式
      */
-    public static Date parseDate(Object str)
-    {
-        if (str == null)
-        {
+    public static Date parseDate(Object str) {
+        if (str == null) {
             return null;
         }
-        try
-        {
+        try {
             return parseDate(str.toString(), parsePatterns);
-        }
-        catch (ParseException e)
-        {
+        } catch (ParseException e) {
             return null;
         }
     }
@@ -135,8 +120,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 获取服务器启动时间
      */
-    public static Date getServerStartDate()
-    {
+    public static Date getServerStartDate() {
         long time = ManagementFactory.getRuntimeMXBean().getStartTime();
         return new Date(time);
     }
@@ -144,16 +128,14 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 计算相差天数
      */
-    public static int differentDaysByMillisecond(Date date1, Date date2)
-    {
+    public static int differentDaysByMillisecond(Date date1, Date date2) {
         return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24)));
     }
 
     /**
      * 计算两个时间差
      */
-    public static String getDatePoor(Date endDate, Date nowDate)
-    {
+    public static String getDatePoor(Date endDate, Date nowDate) {
         long nd = 1000 * 24 * 60 * 60;
         long nh = 1000 * 60 * 60;
         long nm = 1000 * 60;
@@ -174,8 +156,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 增加 LocalDateTime ==> Date
      */
-    public static Date toDate(LocalDateTime temporalAccessor)
-    {
+    public static Date toDate(LocalDateTime temporalAccessor) {
         ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault());
         return Date.from(zdt.toInstant());
     }
@@ -183,10 +164,53 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     /**
      * 增加 LocalDate ==> Date
      */
-    public static Date toDate(LocalDate temporalAccessor)
-    {
+    public static Date toDate(LocalDate temporalAccessor) {
         LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0));
         ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
         return Date.from(zdt.toInstant());
     }
+
+    /**
+     * 根据时间加减时间(时间可为负)
+     *
+     * @param dateTime 时间
+     * @param seconds  加减的天数
+     * @param format   日期格式(与dateTime格式一致)
+     * @return
+     */
+    public static String plusSeconds(String dateTime, int seconds, String format) {
+        //LocalDateTime parse = parse(dateTime, format);
+        //LocalDateTime localDateTime = parse.plusMinutes(seconds);
+        LocalDate parse = LocalDate.parse(dateTime);
+        LocalDate localDate = LocalDate.now().plusDays(seconds);
+        String date = localDate.format(DateTimeFormatter.ofPattern(format));
+        return date;
+    }
+
+
+    /***
+     * 判断某一个日期是星期几
+     * @param datetime
+     * @return
+     */
+    public static String dateToWeek(String datetime) {
+
+        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
+        String[] weekDays = {"0", "1", "2", "3",
+                "4", "5", "6"};
+        Calendar cal = Calendar.getInstance(); // 获得一个日历
+        Date datet = null;
+        try {
+            datet = f.parse(datetime);
+            cal.setTime(datet);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        int w = cal.get(Calendar.DAY_OF_WEEK) - 1; // 指示一个星期中的某天。
+        if (w < 0)
+            w = 0;
+        return weekDays[w];
+
+    }
+
 }

+ 61 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/HolidayUtils.java

@@ -0,0 +1,61 @@
+package com.ruoyi.common.utils;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+public class HolidayUtils {
+
+    public static String request( String httpArg) {
+
+        String httpUrl="http://tool.bitefu.net/jiari/";
+
+        BufferedReader reader = null;
+
+        String result = null;
+
+        StringBuffer sbf = new StringBuffer();
+
+        httpUrl = httpUrl + "?d=" + httpArg;
+
+        try {
+
+            URL url = new URL(httpUrl);
+
+            HttpURLConnection connection = (HttpURLConnection) url
+
+                    .openConnection();
+
+            connection.setRequestMethod("GET");
+
+            connection.connect();
+
+            InputStream is = connection.getInputStream();
+
+            reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
+
+            String strRead = null;
+
+            while ((strRead = reader.readLine()) != null) {
+                sbf.append(strRead);
+            }
+
+            reader.close();
+
+            result = sbf.toString();
+
+            //Map map= (Map) JSON.parse(result);
+
+            //String res=(String)map.get(httpArg);
+
+        } catch (Exception e) {
+
+            e.printStackTrace();
+
+        }
+
+        return result;
+    }
+}

+ 2 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java

@@ -150,4 +150,6 @@ public interface SysUserMapper
      * @return
      */
     int updatePhone(SysUser user);
+
+    List<SysUser> selectUserListNoDept();
 }

+ 87 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/Task.java

@@ -0,0 +1,87 @@
+package com.ruoyi.system.service;
+
+
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.HolidayUtils;
+import com.ruoyi.system.domain.KaoqinRecord;
+import com.ruoyi.system.mapper.KaoqinRecordMapper;
+import com.ruoyi.system.mapper.SysUserMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Component
+public class Task {
+
+    @Autowired
+    private SysUserMapper userMapper;
+    @Autowired
+    private KaoqinRecordMapper kaoqinRecordMapper;
+
+    /***
+     * 定时插入未打卡数据
+     */
+    @Async
+    //@Scheduled(cron = "0 0/2 * * * ? ")
+    @Scheduled(cron = "0 1 0 * * ? ")
+    public void thirdNucleicAcid() {
+        //获取前一天的日期
+        String data = DateUtils.plusSeconds(DateUtils.getDate(),-1,"yyyy-MM-dd");
+        //判断前一天是否是法定节假日  0 上班 1周末 2节假日
+        String jsonResult = HolidayUtils.request(data);
+        if(!"0".equals(jsonResult)){
+            //是节假日的话不需要插入数据,直接返回
+            return;
+        }
+        //获取所有有部门的人员
+        List<SysUser> userList = userMapper.selectUserListNoDept();
+        //获取前一天的所有考勤记录
+        KaoqinRecord kaoqinRecord = new KaoqinRecord();
+        kaoqinRecord.setKaTime(data);
+        List<KaoqinRecord> kaoqinRecordList = kaoqinRecordMapper.selectKaoqinRecordList(kaoqinRecord);
+        for (SysUser sysUser : userList) {
+            boolean bl = true;
+            for (KaoqinRecord record : kaoqinRecordList) {
+                if(record.getUserId().equals(sysUser.getUserId())){
+                    bl = false;
+                }
+            }
+            if(bl){
+                //将日期拆分成年月日的数组
+                String[] datas = data.split("-");
+                KaoqinRecord kaoqinRecords = new KaoqinRecord();
+                kaoqinRecords.setUserId(sysUser.getUserId());
+                kaoqinRecords.setUserName(sysUser.getNickName());
+                kaoqinRecords.setDeptId(sysUser.getDeptId());
+                kaoqinRecords.setDeptName(sysUser.getDept().getDeptName());
+                kaoqinRecords.setAncestors(sysUser.getDept().getAncestors());
+                kaoqinRecords.setKaYear(datas[0]);
+                kaoqinRecords.setKaMonth(datas[1]);
+                kaoqinRecords.setKaDay(datas[2]);
+                kaoqinRecords.setKaWeek(DateUtils.dateToWeek(data));
+                kaoqinRecords.setKaTime(data);
+                kaoqinRecords.setKaTypeAmIn("5");
+                kaoqinRecords.setKaTypeAmOut("5");
+                kaoqinRecords.setKaTypePmIn("5");
+                kaoqinRecords.setKaTypePmOut("5");
+                kaoqinRecords.setKaStatus("2");
+                kaoqinRecords.setCreateTime(DateUtils.getNowDate());
+                kaoqinRecordMapper.insertKaoqinRecord(kaoqinRecords);
+            }
+
+        }
+
+    }
+    //0 上班 1周末 2节假日
+    /*public static void main(String[] args) {
+        String data = DateUtils.plusSeconds(DateUtils.getDate(),-1,"yyyy-MM-dd");
+        System.out.println(data);
+    }*/
+
+
+}

+ 10 - 0
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -69,6 +69,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<if test="userName != null and userName != ''">
 			AND u.user_name like concat('%', #{userName}, '%')
 		</if>
+		<if test="nickName != null and nickName != ''">
+			AND u.nick_name like concat('%', #{nickName}, '%')
+		</if>
 		<if test="status != null and status != ''">
 			AND u.status = #{status}
 		</if>
@@ -266,5 +269,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		and (u.dept_id = 0 or u.dept_id is null)
 		limit 1
 	</select>
+
+	<select id="selectUserListNoDept" parameterType="SysUser" resultMap="SysUserResult">
+		select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader, d.ancestors from sys_user u
+		left join sys_dept d on u.dept_id = d.dept_id
+		where u.del_flag = '0'
+		  and u.dept_id !=0 and u.dept_id !='' and u.dept_id is not null
+	</select>
 	
 </mapper>