Browse Source

fix 新增定时任务,每月一号往考勤表插入数据

Administrator 3 years ago
parent
commit
ebd83f5b8b

+ 7 - 0
boman-api/boman-api-system/src/main/java/com/boman/system/api/RemoteUserService.java

@@ -38,4 +38,11 @@ public interface RemoteUserService
      */
     @PostMapping("/user/listByDeptId")
     List<SysUser> listByDeptId(@RequestBody List<Long> deptIdList);
+
+    /**
+     * 查询所有用户
+     * @return
+     */
+    @GetMapping("/userListAll")
+    List<SysUser> selectUserListAll();
 }

+ 24 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/SysUser.java

@@ -90,6 +90,30 @@ public class SysUser extends BaseEntity
 
     /** 岗位组 */
     private Long[] postIds;
+    /**
+     * 小程序唯一标识
+     */
+    private String unionId;
+    /**
+     *登陆后的唯一标识
+     */
+    private String openId;
+
+    public String getUnionId() {
+        return unionId;
+    }
+
+    public void setUnionId(String unionId) {
+        this.unionId = unionId;
+    }
+
+    public String getOpenId() {
+        return openId;
+    }
+
+    public void setOpenId(String openId) {
+        this.openId = openId;
+    }
 
     public SysUser()
     {

+ 21 - 0
boman-api/boman-domain/src/main/java/com.boman.domain/constant/AttendanceConst.java

@@ -22,6 +22,23 @@ public class AttendanceConst {
     public static final String ATTENDANCE_TABLE_LATE = "attendance_table_late";
     /** 是否早退 **/
     public static final String ATTENDANCE_TABLE_LEAVE_EARLY = "attendance_table_leave";
+    /**
+     * 早上迟到
+     */
+    public static final String LATE_TIME = "late_time";
+    /**
+     * 早上早退
+     */
+    public static final String LEAVE_EARLY_TIME = "leave_early_time";
+
+    /**
+     * 下午迟到分钟
+     */
+    public static final String LATE_TIME_PM = "late_time_pm";
+    /**
+     * 午早退分钟
+     */
+    public static final String LEAVE_EARLY_TIME_PM = "leave_early_time_pm";
 
     /** 当天时间 yyyy-MM-dd 查询的时候是 in **/
     public static final String ATTENDANCE_TABLE_TODAYTIME = "attendance_table_todaytime";
@@ -38,6 +55,10 @@ public class AttendanceConst {
 
     /** 创建时间 **/
     public static final String ATTENDANCE_TABLE_CREATE_TIME = "create_time";
+    /**
+     * 创建人
+     */
+    public static final String ATTENDANCE_TABLE_CREATE_BY = "create_by";
 
     /** 经度 **/
     public static final String ATTENDANCE_TABLE_LONGITUDE = "longitude";

+ 47 - 6
boman-common/boman-common-core/src/main/java/com/boman/common/core/utils/DateUtils.java

@@ -101,12 +101,6 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         return yyyy + re;
     }
 
-    public static void main(String[] args) {
-        String re = getLastDayOfMonthStr();
-        re = re.substring(4);
-        System.out.println(getYear() + re);
-    }
-
 
     public static Date getLastDayOfMonth() {
         String str = getLastDayOfMonthStr();
@@ -326,4 +320,51 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         return typeNo;
     }
 
+
+    /**
+     * 获取某年某月每一天日期
+     *
+     * @return
+     */
+    public static List<String> getMonthEveryDays(String date) {
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
+        List<String> arr = new ArrayList<>();
+        try {
+            Date parse = simpleDateFormat.parse(date);
+            Calendar c = Calendar.getInstance();
+            c.setTime(parse);
+            int year = c.get(Calendar.YEAR);
+            int monthInt = c.get(Calendar.MONTH) + 1;
+            int num = getDaysByYearMonth(year, monthInt);
+            for (int i = 1; i <= num; i++) {
+                String day = String.valueOf(i);
+                if (i < 10) {
+                    day = "0" + i;
+                }
+                String month = String.valueOf(monthInt);
+                if (monthInt < 10) {
+                    month = "0" + monthInt;
+                }
+                arr.add(year + "-" + month + "-" + day);
+            }
+            return arr;
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 根据年 月 获取对应的月份 天数
+     */
+    public static int getDaysByYearMonth(int year, int month) {
+        Calendar a = Calendar.getInstance();
+        a.set(Calendar.YEAR, year);
+        a.set(Calendar.MONTH, month - 1);
+        a.set(Calendar.DATE, 1);
+        a.roll(Calendar.DATE, -1);
+        int maxDate = a.get(Calendar.DATE);
+        return maxDate;
+    }
+
 }

+ 10 - 0
boman-modules/boman-system/src/main/java/com/boman/system/controller/SysUserController.java

@@ -295,4 +295,14 @@ public class SysUserController extends BaseController
     public void addUser(@Validated @RequestBody List<JSONObject> result) {
          userService.addUser(result);
     }
+
+
+    /**
+     * 获取全部用户列表
+     */
+    @GetMapping("/userListAll")
+    public List<SysUser> selectUserListAll()
+    {
+        return userService.selectUserListAll();
+    }
 }

+ 6 - 0
boman-modules/boman-system/src/main/java/com/boman/system/mapper/SysUserMapper.java

@@ -114,4 +114,10 @@ public interface SysUserMapper
      * 部门下所有人
      */
     List<SysUser> listByDeptId(@Param("deptIdList") List<Long> deptIdList);
+
+    /**
+     * 查询所有用户
+     * @return
+     */
+    List<SysUser> selectUserListAll();
 }

+ 6 - 0
boman-modules/boman-system/src/main/java/com/boman/system/service/ISysUserService.java

@@ -178,4 +178,10 @@ public interface ISysUserService
      * @return
      */
     public void addUser(List<JSONObject> result);
+
+    /**
+     * 查询所有用户
+     * @return
+     */
+    List<SysUser> selectUserListAll();
 }

+ 9 - 0
boman-modules/boman-system/src/main/java/com/boman/system/service/impl/SysUserServiceImpl.java

@@ -502,4 +502,13 @@ public class SysUserServiceImpl implements ISysUserService
             userMapper.insertUser(user);
         }
     }
+
+    /**
+     * 查询所有用户
+     * @return
+     */
+    @Override
+    public List<SysUser> selectUserListAll() {
+        return userMapper.selectUserListAll();
+    }
 }

+ 0 - 0
boman-modules/boman-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml → boman-modules/boman-system/src/main/resources/mapper/system/ITaskService.xml


+ 8 - 1
boman-modules/boman-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -23,6 +23,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="updateBy"     column="update_by"    />
 		<result property="updateTime"   column="update_time"  />
 		<result property="remark"       column="remark"       />
+		<result property="unionId"       column="union_id"       />
+		<result property="openId"       column="open_id"       />
 		<association property="dept"    column="dept_id" javaType="com.boman.domain.SysDept" resultMap="deptResult" />
 		<collection  property="roles"   javaType="java.util.List"        resultMap="RoleResult" />
 	</resultMap>
@@ -46,7 +48,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	</resultMap>
 	
 	<sql id="selectUserVo">
-        select u.id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, 
+        select u.id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, u.union_id, u.open_id,
         d.id, d.parent_id, d.dept_name, d.order_num, d.leader, d.status as dept_status,
         r.id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
         from sys_user u
@@ -183,5 +185,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			#{deptId}
         </foreach>
  	</select>
+
+	<select id="selectUserListAll" resultMap="SysUserResult">
+		<include refid="selectUserVo"/>
+		where u.status = '0' and del_flag = '0'
+	</select>
 	
 </mapper> 

+ 31 - 0
boman-web-core/src/main/java/com/boman/web/core/controller/TaskController.java

@@ -0,0 +1,31 @@
+package com.boman.web.core.controller;
+
+import com.boman.common.core.utils.DateUtils;
+import com.boman.web.core.service.TaskService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Controller;
+
+import javax.annotation.Resource;
+
+/**
+ * @author tjf
+ * @Date: 2021/08/04/17:48
+ */
+@Configuration      //1.主要用于标记配置类,兼备Component的效果。
+@EnableScheduling   // 2.开启定时任务
+public class TaskController {
+    @Resource
+    private TaskService taskService;
+    /**
+     * 每月1号往考勤记录表根据用户插入当月的数据 每月一号00:00分
+     */
+    @Scheduled(cron = "0 0 23 * * ?")
+    private void configureTasks() {
+        System.out.println(DateUtils.getNowDate() +"开始执行定时任务");
+        taskService.configureTasks();
+        System.out.println(DateUtils.getNowDate() +"定时任务结束");
+    }
+}

+ 85 - 0
boman-web-core/src/main/java/com/boman/web/core/service/TaskService.java

@@ -0,0 +1,85 @@
+package com.boman.web.core.service;
+
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.boman.common.core.utils.DateUtils;
+import com.boman.common.core.utils.SecurityUtils;
+import com.boman.domain.SysUser;
+import com.boman.domain.dto.AjaxResult;
+import com.boman.domain.dto.FormDataDto;
+import com.boman.system.api.RemoteUserService;
+import com.boman.web.core.service.common.ICommonService;
+import com.boman.web.core.utils.AuthUtils;
+import org.springframework.stereotype.Component;
+import springfox.documentation.spring.web.json.Json;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import static com.boman.domain.constant.AttendanceConst.*;
+import static com.boman.domain.constant.AttendanceConst.ATTENDANCE_DEPT_ID;
+
+
+/**
+ * @author tjf
+ * @Date: 2021/08/04/17:49
+ */
+@Component
+public class TaskService {
+    @Resource
+    private TableServiceCmdService tableServiceCmdService;
+
+    @Resource
+    private RemoteUserService remoteUserService;
+
+    @Resource
+    private ICommonService commonService;
+    private static final String tableName= "attendance_table";
+
+    /**
+     * 每月1号往考勤记录表根据用户插入当月的数据 每月一号00:00分
+     */
+    public void configureTasks() {
+        //获取当月每一天
+        Date nowDate = DateUtils.getNowDate();
+        List<String> monthEveryDays = DateUtils.getMonthEveryDays(nowDate.toString());
+        //获取所有用户
+        List<SysUser> sysUsers = remoteUserService.selectUserListAll();
+        if (sysUsers != null && sysUsers.size() > 0){
+            if (monthEveryDays != null) {
+                JSONObject condition = new JSONObject();
+                //需要ATTENDANCE_TABLE_TODAYTIME字段是查询可见
+                condition.put(ATTENDANCE_TABLE_TODAYTIME,monthEveryDays);
+                //先去查询是否已经存在当前日期的记录
+                List<JSONObject> byMap = commonService.getByMap(tableName, condition);
+                if (byMap != null){
+                    List<String> days = new ArrayList<>();
+                    for (JSONObject jsonObject : byMap) {
+                        String day = jsonObject.get(ATTENDANCE_TABLE_TODAYTIME).toString();
+                        days.add(day);
+                    }
+                    monthEveryDays.removeAll(days);
+                }
+                for (String monthEveryDay : monthEveryDays) {
+                    for (SysUser sysUser : sysUsers) {
+                        JSONObject commitData = new JSONObject();
+                        commitData.put(ATTENDANCE_USER_NAME,sysUser.getUserName());
+                        commitData.put(ATTENDANCE_USER_ID, sysUser.getId());
+                        commitData.put(ATTENDANCE_DEPT_ID,sysUser.getDeptId());
+                        commitData.put(ATTENDANCE_TABLE_TODAYTIME,monthEveryDay);
+                        commitData.put(ATTENDANCE_TABLE_CREATE_TIME,DateUtils.getNowDate());
+                        commitData.put(ATTENDANCE_TABLE_CREATE_BY,"admin");
+                        FormDataDto dto = new FormDataDto();
+                        dto.setObjId(-1L);
+                        dto.setTable(tableName);
+                        dto.setFixedData(commitData);
+                        tableServiceCmdService.objectSave(dto);
+                    }
+                }
+            }
+        }
+    }
+}

+ 45 - 49
boman-web-core/src/main/java/com/boman/web/core/service/attendance/AttendanceServiceImpl.java

@@ -304,39 +304,71 @@ public class AttendanceServiceImpl implements AttendanceService {
         String tableName = requireNonNull(dto.getTableName(), "clockOn tableName is empty");
 
         JSONObject commitData = new JSONObject();
+        Long deptId = AuthUtils.getLoginUser().getSysUser().getDeptId();
         commitData.put(ATTENDANCE_USER_NAME, SecurityUtils.getUsername());
         commitData.put(ATTENDANCE_TABLE_TODAYTIME, DateUtils.getDate());
         commitData.put(ATTENDANCE_TABLE_LONGITUDE, dto.getLongitude());
         commitData.put(ATTENDANCE_TABLE_LATITUDE, dto.getLatitude());
         commitData.put(ATTENDANCE_USER_ID, SecurityUtils.getUserId());
-        commitData.put(ATTENDANCE_DEPT_ID, AuthUtils.getLoginUser().getSysUser().getDeptId());
+        commitData.put(ATTENDANCE_DEPT_ID, deptId);
         Timestamp currentTime = new Timestamp(System.currentTimeMillis());
         // 是否请假
         if (checkIsLeave()) {
             //
         }
 
+        //获取考勤规定时间
+        JSONObject rules = rulesService.listByDeptId(deptId);
+        //规定上午上班时间
+        String attendanceRulesStartTime = rules.get("attendance_rules_start_time").toString();
+        //规定下午上班时间
+        String attendanceRulesEndTime = rules.get("attendance_rules_end_time").toString();
+        //规定的下午上班时间
+        String attendanceRulesStartTimePm = rules.get("attendance_rules_start_time_pm").toString();
+        //规定的下午下班时间
+        String attendanceRulesEndTimePm = rules.get("attendance_rules_end_time_pm").toString();
         UpdateDto updateDto = new UpdateDto();
         //如果是更新
         JSONObject commitDataUpdate = new JSONObject();
         if (GO_TO_WORK_TYPE == type) {
             if (checkIsLate(currentTime, type)) {
+                //判断迟到多久
+                Date date = DateUtils.strToDate(attendanceRulesStartTime, "yyyy-MM-dd HH:mm:ss");
+                String datePoor = DateUtils.getDatePoor(currentTime, date);
+                commitData.put(LATE_TIME, datePoor);
                 commitData.put(ATTENDANCE_ABNORMAL, Y);
                 commitData.put(ATTENDANCE_TABLE_LATE, Y);
             }
             commitData.put(ATTENDANCE_TABLE_WORK, currentTime);
             commitDataUpdate.put(ATTENDANCE_TABLE_WORK, currentTime);
         } else if (GO_OFF_WORK_TYPE == type) {
+            if (checkIsLeaveEarly(currentTime, type)){
+                Date date = DateUtils.strToDate(attendanceRulesEndTime, "yyyy-MM-dd HH:mm:ss");
+                String datePoor = DateUtils.getDatePoor(currentTime, date);
+                commitData.put(LEAVE_EARLY_TIME, datePoor);
+                commitData.put(ATTENDANCE_ABNORMAL, Y);
+                commitData.put(ATTENDANCE_TABLE_LATE, Y);
+            }
             commitData.put(ATTENDANCE_TABLE_OFFWORK, currentTime);
             commitDataUpdate.put(ATTENDANCE_TABLE_OFFWORK, currentTime);
         } else if (GO_TO_WORK_TYPE_PM == type) {
             if (checkIsLate(currentTime, type)) {
+                Date date = DateUtils.strToDate(attendanceRulesStartTimePm, "yyyy-MM-dd HH:mm:ss");
+                String datePoor = DateUtils.getDatePoor(currentTime, date);
+                commitData.put(LATE_TIME_PM, datePoor);
                 commitData.put(ATTENDANCE_ABNORMAL, Y);
                 commitData.put(ATTENDANCE_TABLE_LATE, Y);
             }
             commitData.put(ATTENDANCE_TABLE_WORK_PM, currentTime);
             commitDataUpdate.put(ATTENDANCE_TABLE_WORK_PM, currentTime);
         } else if (GO_OFF_WORK_TYPE_PM == type) {
+            if (checkIsLeaveEarly(currentTime, type)){
+                Date date = DateUtils.strToDate(attendanceRulesEndTimePm, "yyyy-MM-dd HH:mm:ss");
+                String datePoor = DateUtils.getDatePoor(currentTime, date);
+                commitData.put(LEAVE_EARLY_TIME_PM, datePoor);
+                commitData.put(ATTENDANCE_ABNORMAL, Y);
+                commitData.put(ATTENDANCE_TABLE_LATE, Y);
+            }
             commitData.put(ATTENDANCE_TABLE_OFFWORK_PM, currentTime);
             commitDataUpdate.put(ATTENDANCE_TABLE_OFFWORK_PM, currentTime);
         }
@@ -389,7 +421,7 @@ public class AttendanceServiceImpl implements AttendanceService {
         //根据日期 年-月和用户id查询用户当月打卡记录
         List<JSONObject> jsonObjects = standardlyMapper.findDate(date, userId);
         //获取某月的所有日期
-        List<String> monthEveryDays = getMonthEveryDays(date);
+        List<String> monthEveryDays = DateUtils.getMonthEveryDays(date);
         String workDaKa = " 上午上班打卡";
         String workDaKaPm = " 下午上班打卡";
         String offDaKa = " 上午下班打卡";
@@ -447,51 +479,7 @@ public class AttendanceServiceImpl implements AttendanceService {
     }
 
 
-    /**
-     * 获取某年某月每一天日期
-     *
-     * @return
-     */
-    public static List<String> getMonthEveryDays(String date) {
-        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
-        List<String> arr = new ArrayList<>();
-        try {
-            Date parse = simpleDateFormat.parse(date);
-            Calendar c = Calendar.getInstance();
-            c.setTime(parse);
-            int year = c.get(Calendar.YEAR);
-            int monthInt = c.get(Calendar.MONTH) + 1;
-            int num = getDaysByYearMonth(year, monthInt);
-            for (int i = 1; i <= num; i++) {
-                String day = String.valueOf(i);
-                if (i < 10) {
-                    day = "0" + i;
-                }
-                String month = String.valueOf(monthInt);
-                if (monthInt < 10) {
-                    month = "0" + monthInt;
-                }
-                arr.add(year + "-" + month + "-" + day);
-            }
-            return arr;
-        } catch (ParseException e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
 
-    /**
-     * 根据年 月 获取对应的月份 天数
-     */
-    public static int getDaysByYearMonth(int year, int month) {
-        Calendar a = Calendar.getInstance();
-        a.set(Calendar.YEAR, year);
-        a.set(Calendar.MONTH, month - 1);
-        a.set(Calendar.DATE, 1);
-        a.roll(Calendar.DATE, -1);
-        int maxDate = a.get(Calendar.DATE);
-        return maxDate;
-    }
 
     /**
      * 功能描述: 保存打卡信息
@@ -536,10 +524,18 @@ public class AttendanceServiceImpl implements AttendanceService {
      * @param leaveTime 下班打卡时间
      * @return boolean
      */
-    private boolean checkIsLeaveEarly(Timestamp leaveTime) {
+    private boolean checkIsLeaveEarly(Timestamp leaveTime,int type) {
         JSONObject rule = rulesService.listByDeptId(AuthUtils.getLoginUser().getSysUser().getDeptId());
-        Timestamp ruleEndTime = rule.getTimestamp(ATTENDANCE_RULES_END_TIME);
-        return leaveTime.before(ruleEndTime);
+        //判断上午下班时间
+        if (GO_OFF_WORK_TYPE == type) {
+            Timestamp ruleEndTime = rule.getTimestamp(ATTENDANCE_RULES_END_TIME);
+            return leaveTime.before(ruleEndTime);
+        }else if (GO_OFF_WORK_TYPE_PM == type) {
+            //判断下午下班时间
+            Timestamp ruleEndTimePm = rule.getTimestamp(ATTENDANCE_RULES_END_TIME_PM);
+            return leaveTime.before(ruleEndTimePm);
+        }
+        return false;
     }