Commit da2a72f6 authored by 赵啸非's avatar 赵啸非

Merge branch 'master' into 'reg'

Master

See merge request !1
parents b11e3029 885c8a4c
...@@ -23,5 +23,7 @@ public class RedisKey { ...@@ -23,5 +23,7 @@ public class RedisKey {
public static final String KEY_USER_MENU_CACHE = "user:menu"; public static final String KEY_USER_MENU_CACHE = "user:menu";
/** 考勤统计 **/
public static final String KEY_ATTENDANCE_STAT_CACHE = "attendance:stat";
} }
package com.mortals.xhx.common.utils; package com.mortals.xhx.common.utils;
import com.mortals.framework.util.DateUtils;
import com.mortals.framework.util.StringUtils; import com.mortals.framework.util.StringUtils;
import com.mortals.xhx.module.attendance.model.AttendanceRecordErrorEntity;
import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery; import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery;
import com.mortals.xhx.module.attendance.service.AttendanceStatService; import com.mortals.xhx.module.attendance.service.AttendanceStatService;
import com.mortals.xhx.module.check.model.CheckAttendRecordEntity;
import com.mortals.xhx.module.check.model.vo.StaffCheckSummaryQuery;
import com.mortals.xhx.module.check.service.CheckAttendRecordService;
import com.mortals.xhx.utils.SpringUtils;
import lombok.NonNull; import lombok.NonNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
......
package com.mortals.xhx.daemon.applicationservice;
import com.mortals.framework.service.ICacheService;
import com.mortals.framework.springcloud.service.IApplicationStartedService;
import com.mortals.framework.util.StringUtils;
import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery;
import com.mortals.xhx.module.attendance.service.AttendanceStatService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import static com.mortals.xhx.common.key.RedisKey.KEY_ATTENDANCE_STAT_CACHE;
/***
* 考勤汇总任务执行
*/
@Component
@Slf4j
public class AttendSummaryService implements IApplicationStartedService {
protected Boolean stopped = false;
@Autowired
private ICacheService cacheService;
@Autowired
private AttendanceStatService attendanceStatService;
@Override
public void start() {
Thread sendThread = new Thread(new Runnable() {
@Override
public void run() {
int waitTime = 10;
while (!stopped) {
try {
AttendanceSummaryQuery query = cacheService.rpop(KEY_ATTENDANCE_STAT_CACHE, AttendanceSummaryQuery.class);
if(!ObjectUtils.isEmpty(query)){
if (StringUtils.isNotEmpty(query.getSummaryTimeStart()) && StringUtils.isNotEmpty(query.getSummaryTimeEnd())) {
List<String> dateList = getDatesBetween(query.getSummaryTimeStart(), query.getSummaryTimeEnd());
for (String day : dateList) {
AttendanceSummaryQuery temp = new AttendanceSummaryQuery(day);
attendanceStatService.doAttendanceSummary(temp);
}
} else {
attendanceStatService.doAttendanceSummary(query);
}
}
try {
Thread.sleep(waitTime);
} catch (InterruptedException e2) {
}
} catch (Exception e) {
log.error("异常", e);
try {
Thread.sleep(waitTime);
} catch (InterruptedException e2) {
}
}
}
}
});
sendThread.start();
}
@Override
public void stop() {
log.info("停止服务..");
this.stopped = true;
}
@Override
public int getOrder() {
return 20;
}
private List<String> getDatesBetween(String startDateStr, String endDateStr) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate startDate = LocalDate.parse(startDateStr, formatter);
LocalDate endDate = LocalDate.parse(endDateStr, formatter);
List<String> dates = new ArrayList<>();
//这里是判断开始日期是否在结束日期之后或者=结束日期
while (startDate.isBefore(endDate) || startDate.isEqual(endDate)) {
String add = startDate.format(formatter);
dates.add(add);
startDate = startDate.plusDays(1);
}
return dates;
}
}
...@@ -5,11 +5,14 @@ import com.mortals.framework.service.ICacheService; ...@@ -5,11 +5,14 @@ import com.mortals.framework.service.ICacheService;
import com.mortals.framework.service.ITask; import com.mortals.framework.service.ITask;
import com.mortals.framework.service.ITaskExcuteService; import com.mortals.framework.service.ITaskExcuteService;
import com.mortals.framework.util.StringUtils; import com.mortals.framework.util.StringUtils;
import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery;
import com.mortals.xhx.module.attendance.service.AttendanceStatService; import com.mortals.xhx.module.attendance.service.AttendanceStatService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import static com.mortals.xhx.common.key.RedisKey.KEY_ATTENDANCE_STAT_CACHE;
/** /**
* 考勤汇总 * 考勤汇总
*/ */
...@@ -26,18 +29,18 @@ public class AttendanceSummaryTaskImpl implements ITaskExcuteService { ...@@ -26,18 +29,18 @@ public class AttendanceSummaryTaskImpl implements ITaskExcuteService {
@Override @Override
public void excuteTask(ITask task) throws AppException { public void excuteTask(ITask task) throws AppException {
try { // try {
String verify = cacheService.get(SUMMARY_TASK_KEY); // String verify = cacheService.get(SUMMARY_TASK_KEY);
if(StringUtils.isNotEmpty(verify)&&verify.equals("true")){ // if(StringUtils.isNotEmpty(verify)&&verify.equals("true")){
Thread.sleep(600*1000); // Thread.sleep(600*1000);
} // }
cacheService.set(SUMMARY_TASK_KEY,"true",600); // cacheService.set(SUMMARY_TASK_KEY,"true",600);
attendanceStatService.doAttendanceSummary(null); // attendanceStatService.doAttendanceSummary(null);
cacheService.expire(SUMMARY_TASK_KEY,1); // cacheService.expire(SUMMARY_TASK_KEY,1);
}catch (Exception e){ // }catch (Exception e){
//
} // }
cacheService.lpush(KEY_ATTENDANCE_STAT_CACHE,new AttendanceSummaryQuery());
} }
@Override @Override
......
package com.mortals.xhx.module.attendance.service.impl; package com.mortals.xhx.module.attendance.service.impl;
import com.mortals.framework.service.ICacheService;
import com.mortals.framework.util.DateUtils; import com.mortals.framework.util.DateUtils;
import com.mortals.framework.util.ThreadPool;
import com.mortals.xhx.common.utils.AttendSummaryThread;
import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery; import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery;
import com.mortals.xhx.module.attendance.service.AttendanceStatService; import com.mortals.xhx.module.attendance.service.AttendanceStatService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -12,6 +11,9 @@ import com.mortals.framework.model.Context; ...@@ -12,6 +11,9 @@ import com.mortals.framework.model.Context;
import com.mortals.xhx.module.attendance.dao.AttendanceLeaveRecordDao; import com.mortals.xhx.module.attendance.dao.AttendanceLeaveRecordDao;
import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordEntity; import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordEntity;
import com.mortals.xhx.module.attendance.service.AttendanceLeaveRecordService; import com.mortals.xhx.module.attendance.service.AttendanceLeaveRecordService;
import static com.mortals.xhx.common.key.RedisKey.KEY_ATTENDANCE_STAT_CACHE;
/** /**
* AttendanceLeaveRecordService * AttendanceLeaveRecordService
* 请假记录信息 service实现 * 请假记录信息 service实现
...@@ -24,6 +26,8 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At ...@@ -24,6 +26,8 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At
@Autowired @Autowired
private AttendanceStatService attendanceStatService; private AttendanceStatService attendanceStatService;
@Autowired
private ICacheService cacheService;
@Override @Override
protected void updateAfter(AttendanceLeaveRecordEntity entity, Context context) throws AppException { protected void updateAfter(AttendanceLeaveRecordEntity entity, Context context) throws AppException {
...@@ -33,8 +37,10 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At ...@@ -33,8 +37,10 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At
query.setStaffId(entity.getLeavePersonId()); query.setStaffId(entity.getLeavePersonId());
query.setSummaryTimeStart(DateUtils.getStrDate(entity.getStartTime())); query.setSummaryTimeStart(DateUtils.getStrDate(entity.getStartTime()));
query.setSummaryTimeEnd(DateUtils.getStrDate(entity.getEndTime())); query.setSummaryTimeEnd(DateUtils.getStrDate(entity.getEndTime()));
AttendSummaryThread summaryThread = new AttendSummaryThread(attendanceStatService, query); // AttendSummaryThread summaryThread = new AttendSummaryThread(attendanceStatService, query);
ThreadPool.getInstance().execute(summaryThread); // ThreadPool.getInstance().execute(summaryThread);
cacheService.lpush(KEY_ATTENDANCE_STAT_CACHE,query);
} }
} }
} }
\ No newline at end of file
...@@ -3,15 +3,14 @@ package com.mortals.xhx.module.attendance.service.impl; ...@@ -3,15 +3,14 @@ package com.mortals.xhx.module.attendance.service.impl;
import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.mortals.framework.model.PageInfo; import com.mortals.framework.model.PageInfo;
import com.mortals.framework.service.ICacheService;
import com.mortals.framework.util.DataUtil; import com.mortals.framework.util.DataUtil;
import com.mortals.framework.util.DateUtils; import com.mortals.framework.util.DateUtils;
import com.mortals.framework.util.StringUtils; import com.mortals.framework.util.StringUtils;
import com.mortals.framework.util.ThreadPool;
import com.mortals.xhx.busiz.h5.req.AttendSaveReq; import com.mortals.xhx.busiz.h5.req.AttendSaveReq;
import com.mortals.xhx.busiz.h5.web.ApiWebPerformController; import com.mortals.xhx.busiz.h5.web.ApiWebPerformController;
import com.mortals.xhx.common.code.ErrorStatusEnum; import com.mortals.xhx.common.code.ErrorStatusEnum;
import com.mortals.xhx.common.code.YesNoEnum; import com.mortals.xhx.common.code.YesNoEnum;
import com.mortals.xhx.common.utils.AttendSummaryThread;
import com.mortals.xhx.module.attendance.model.AttendanceClassDetailEntity; import com.mortals.xhx.module.attendance.model.AttendanceClassDetailEntity;
import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery; import com.mortals.xhx.module.attendance.model.vo.AttendanceSummaryQuery;
import com.mortals.xhx.module.attendance.service.*; import com.mortals.xhx.module.attendance.service.*;
...@@ -28,6 +27,8 @@ import org.springframework.util.ObjectUtils; ...@@ -28,6 +27,8 @@ import org.springframework.util.ObjectUtils;
import java.util.List; import java.util.List;
import static com.mortals.xhx.common.key.RedisKey.KEY_ATTENDANCE_STAT_CACHE;
/** /**
* AttendanceRecordErrorService * AttendanceRecordErrorService
* 考勤打卡记录异常信息 service实现 * 考勤打卡记录异常信息 service实现
...@@ -52,6 +53,8 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At ...@@ -52,6 +53,8 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
private StaffService staffService; private StaffService staffService;
@Autowired @Autowired
private AttendanceStatService attendanceStatService; private AttendanceStatService attendanceStatService;
@Autowired
private ICacheService cacheService;
@Override @Override
...@@ -151,8 +154,9 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At ...@@ -151,8 +154,9 @@ public class AttendanceRecordErrorServiceImpl extends AbstractCRUDServiceImpl<At
AttendanceSummaryQuery query = new AttendanceSummaryQuery(); AttendanceSummaryQuery query = new AttendanceSummaryQuery();
query.setStaffId(entity.getStaffId()); query.setStaffId(entity.getStaffId());
query.setSummaryTime(DateUtils.getStrDate(entity.getErrorDateTime())); query.setSummaryTime(DateUtils.getStrDate(entity.getErrorDateTime()));
AttendSummaryThread summaryThread = new AttendSummaryThread(attendanceStatService, query); // AttendSummaryThread summaryThread = new AttendSummaryThread(attendanceStatService, query);
ThreadPool.getInstance().execute(summaryThread); // ThreadPool.getInstance().execute(summaryThread);
cacheService.lpush(KEY_ATTENDANCE_STAT_CACHE,query);
} }
} }
} }
......
...@@ -54,6 +54,7 @@ import org.springframework.web.bind.annotation.*; ...@@ -54,6 +54,7 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import static com.mortals.framework.ap.SysConstains.*; import static com.mortals.framework.ap.SysConstains.*;
import static com.mortals.xhx.common.key.RedisKey.KEY_ATTENDANCE_STAT_CACHE;
/** /**
* 考勤汇总信息 * 考勤汇总信息
...@@ -105,26 +106,16 @@ public class AttendanceStatController extends BaseCRUDJsonBodyMappingController< ...@@ -105,26 +106,16 @@ public class AttendanceStatController extends BaseCRUDJsonBodyMappingController<
String busiDesc = "执行考勤汇总任务"; String busiDesc = "执行考勤汇总任务";
int code = 1; int code = 1;
try { try {
String verify = cacheService.get(SUMMARY_TASK_KEY);
if (StringUtils.isNotEmpty(verify) && verify.equals("true")) {
throw new AppException("汇总任务正在执行,请勿重复操作");
}
executorService.submit(new Runnable() {
@Override
public void run() {
cacheService.set(SUMMARY_TASK_KEY, "true", 600);
if (StringUtils.isNotEmpty(query.getSummaryTimeStart()) && StringUtils.isNotEmpty(query.getSummaryTimeEnd())) { if (StringUtils.isNotEmpty(query.getSummaryTimeStart()) && StringUtils.isNotEmpty(query.getSummaryTimeEnd())) {
List<String> dateList = getDatesBetween(query.getSummaryTimeStart(), query.getSummaryTimeEnd()); List<String> dateList = getDatesBetween(query.getSummaryTimeStart(), query.getSummaryTimeEnd());
for (String day : dateList) { for (String day : dateList) {
AttendanceSummaryQuery temp = new AttendanceSummaryQuery(day); AttendanceSummaryQuery temp = new AttendanceSummaryQuery(day);
service.doAttendanceSummary(temp); cacheService.lpush(KEY_ATTENDANCE_STAT_CACHE,temp);
} }
} else { } else {
service.doAttendanceSummary(query); cacheService.lpush(KEY_ATTENDANCE_STAT_CACHE,query);
} }
cacheService.expire(SUMMARY_TASK_KEY, 1);
}
});
model.put("message_info", "开始执行考勤汇总,请稍后查看"); model.put("message_info", "开始执行考勤汇总,请稍后查看");
} catch (Exception var9) { } catch (Exception var9) {
code = -1; code = -1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment