Commit 316d69dd authored by 赵啸非's avatar 赵啸非

修改请假计算考勤

parent aaf8abe9
...@@ -25,6 +25,10 @@ public class RedisKey { ...@@ -25,6 +25,10 @@ public class RedisKey {
/** 考勤统计 **/ /** 考勤统计 **/
public static final String KEY_ATTENDANCE_STAT_CACHE = "attendance:stat"; public static final String KEY_ATTENDANCE_STAT_CACHE = "attendance:stat";
/** 考勤统计lock **/
public static final String KEY_ATTENDANCE_STAT_LOCK_CACHE = "attendance:stat:lock";
/** 考勤统计时间 **/ /** 考勤统计时间 **/
public static final String ATTENDANCE_STAT_TIME = "attendanceSummaryTime"; public static final String ATTENDANCE_STAT_TIME = "attendanceSummaryTime";
......
...@@ -19,6 +19,7 @@ import org.springframework.util.StopWatch; ...@@ -19,6 +19,7 @@ import org.springframework.util.StopWatch;
import java.util.Arrays; import java.util.Arrays;
import static com.mortals.xhx.common.key.RedisKey.KEY_ATTENDANCE_STAT_CACHE; import static com.mortals.xhx.common.key.RedisKey.KEY_ATTENDANCE_STAT_CACHE;
import static com.mortals.xhx.common.key.RedisKey.KEY_ATTENDANCE_STAT_LOCK_CACHE;
@AllArgsConstructor @AllArgsConstructor
...@@ -64,8 +65,9 @@ public class AddAttendThread implements Runnable { ...@@ -64,8 +65,9 @@ public class AddAttendThread implements Runnable {
hikEntity.setOrderColList(Arrays.asList(new OrderCol("attendanceDate"))); hikEntity.setOrderColList(Arrays.asList(new OrderCol("attendanceDate")));
hikService.addAttendanceRecordByQuery(hikEntity, context); hikService.addAttendanceRecordByQuery(hikEntity, context);
stopWatch.stop(); stopWatch.stop();
log.info("考勤计算日期:{} 完成,耗时:{}ms",curDate.toDateStr(), stopWatch.getLastTaskTimeMillis()); log.info("考勤计算日期:{} 完成,耗时:{}ms", curDate.toDateStr(), stopWatch.getLastTaskTimeMillis());
} }
//cacheService.del(KEY_ATTENDANCE_STAT_LOCK_CACHE);
//生成汇总信息 //生成汇总信息
/* log.info("生成考勤汇总消息开始。。。"); /* log.info("生成考勤汇总消息开始。。。");
AttendanceSummaryQuery query = new AttendanceSummaryQuery(); AttendanceSummaryQuery query = new AttendanceSummaryQuery();
...@@ -83,7 +85,7 @@ public class AddAttendThread implements Runnable { ...@@ -83,7 +85,7 @@ public class AddAttendThread implements Runnable {
public static void main(String[] args) { public static void main(String[] args) {
int compare=0; int compare = 0;
for (int i = 0; i <= compare; i++) { for (int i = 0; i <= compare; i++) {
......
...@@ -49,8 +49,6 @@ public class SyncDoorsEventAfterTaskImpl implements ITaskExcuteService { ...@@ -49,8 +49,6 @@ public class SyncDoorsEventAfterTaskImpl implements ITaskExcuteService {
private AttendanceRecordHikService recordHikService; private AttendanceRecordHikService recordHikService;
@Autowired @Autowired
private AttendanceStatService attendanceStatService; private AttendanceStatService attendanceStatService;
@Autowired
private ICacheService cacheService;
@Value("${hik.host:}") @Value("${hik.host:}")
protected String hikhost; protected String hikhost;
......
...@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateTime; ...@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateTime;
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.exception.AppException; import com.mortals.framework.exception.AppException;
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.ThreadPool; import com.mortals.framework.util.ThreadPool;
...@@ -26,6 +27,8 @@ import org.springframework.util.StopWatch; ...@@ -26,6 +27,8 @@ import org.springframework.util.StopWatch;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import static com.mortals.xhx.common.key.RedisKey.KEY_ATTENDANCE_STAT_LOCK_CACHE;
/** /**
* 同步获取本周门禁事件与计算(同步钉钉请假事件) * 同步获取本周门禁事件与计算(同步钉钉请假事件)
*/ */
...@@ -39,6 +42,8 @@ public class SyncDoorsEventWeekTaskImpl implements ITaskExcuteService { ...@@ -39,6 +42,8 @@ public class SyncDoorsEventWeekTaskImpl implements ITaskExcuteService {
private AttendanceLeaveRecordService attendanceLeaveRecordService; private AttendanceLeaveRecordService attendanceLeaveRecordService;
@Autowired @Autowired
private DoorService doorService; private DoorService doorService;
@Autowired
private ICacheService cacheService;
@Value("${dingtalk.domain:}") @Value("${dingtalk.domain:}")
...@@ -103,8 +108,11 @@ public class SyncDoorsEventWeekTaskImpl implements ITaskExcuteService { ...@@ -103,8 +108,11 @@ public class SyncDoorsEventWeekTaskImpl implements ITaskExcuteService {
} }
} }
log.info("开始计算及统计最近7天考勤!"); log.info("开始计算及统计最近7天考勤!");
String expire = cacheService.get(KEY_ATTENDANCE_STAT_LOCK_CACHE);
if(ObjectUtils.isEmpty(expire)) {
AddAttendThread addAttendThread = new AddAttendThread(recordHikService, hikEntity, null); AddAttendThread addAttendThread = new AddAttendThread(recordHikService, hikEntity, null);
ThreadPool.getInstance().execute(addAttendThread); ThreadPool.getInstance().execute(addAttendThread);
}
//同步最近钉钉请假事件 //同步最近钉钉请假事件
checkDingDingEvent(attendStart, attendEnd, hikEntity); checkDingDingEvent(attendStart, attendEnd, hikEntity);
} }
......
...@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject; ...@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
import com.aliyun.dingtalkworkflow_1_0.models.ListProcessInstanceIdsResponse; import com.aliyun.dingtalkworkflow_1_0.models.ListProcessInstanceIdsResponse;
import com.aliyun.dingtalkworkflow_1_0.models.ListProcessInstanceIdsResponseBody; import com.aliyun.dingtalkworkflow_1_0.models.ListProcessInstanceIdsResponseBody;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
import com.mortals.framework.model.OrderCol;
import com.mortals.framework.service.ICacheService; 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;
...@@ -156,6 +157,7 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At ...@@ -156,6 +157,7 @@ public class AttendanceLeaveRecordServiceImpl extends AbstractCRUDServiceImpl<At
attendanceRecordHikQuery.setAttendanceDateStart(DateUtil.formatDate(entity.getStartTime())); attendanceRecordHikQuery.setAttendanceDateStart(DateUtil.formatDate(entity.getStartTime()));
attendanceRecordHikQuery.setAttendanceDateEnd(DateUtil.formatDate(entity.getEndTime())); attendanceRecordHikQuery.setAttendanceDateEnd(DateUtil.formatDate(entity.getEndTime()));
} }
AddAttendThread addAttendThread = new AddAttendThread(hikService, attendanceRecordHikQuery, context); AddAttendThread addAttendThread = new AddAttendThread(hikService, attendanceRecordHikQuery, context);
ThreadPool.getInstance().execute(addAttendThread); ThreadPool.getInstance().execute(addAttendThread);
} }
......
...@@ -457,8 +457,10 @@ public class FixWorkOtherAttendance extends AttendanceWorkAbstract { ...@@ -457,8 +457,10 @@ public class FixWorkOtherAttendance extends AttendanceWorkAbstract {
errorQuery.setErrorDateTimeEnd(dateStr); errorQuery.setErrorDateTimeEnd(dateStr);
errorQuery.setStaffId(staffId); errorQuery.setStaffId(staffId);
errorQuery.setProcessStatus(YesNoEnum.NO.getValue()); errorQuery.setProcessStatus(YesNoEnum.NO.getValue());
Long[] errorIds = errorService.find(errorQuery).stream().map(i -> i.getId()).toArray(Long[]::new); List<AttendanceRecordErrorEntity> attendanceRecordErrorEntities = errorService.find(errorQuery);
Long[] errorIds = attendanceRecordErrorEntities.stream().map(i -> i.getId()).toArray(Long[]::new);
if (!ObjectUtils.isEmpty(errorIds)) { if (!ObjectUtils.isEmpty(errorIds)) {
log.info("删除 {} 人员:{} 异常记录:{}",dateStr,staffId, JSON.toJSONString(attendanceRecordErrorEntities));
errorService.remove(errorIds, context); errorService.remove(errorIds, context);
} }
} }
......
...@@ -17,6 +17,7 @@ import com.mortals.framework.utils.ServletUtils; ...@@ -17,6 +17,7 @@ import com.mortals.framework.utils.ServletUtils;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.param.service.ParamService; import com.mortals.xhx.base.system.param.service.ParamService;
import com.mortals.xhx.base.system.upload.service.UploadService; import com.mortals.xhx.base.system.upload.service.UploadService;
import com.mortals.xhx.common.key.RedisKey;
import com.mortals.xhx.common.keys.RedisCacheKeys; import com.mortals.xhx.common.keys.RedisCacheKeys;
import com.mortals.xhx.common.utils.AddAttendThread; import com.mortals.xhx.common.utils.AddAttendThread;
import com.mortals.xhx.module.attendance.model.*; import com.mortals.xhx.module.attendance.model.*;
...@@ -51,6 +52,8 @@ import java.io.InputStream; ...@@ -51,6 +52,8 @@ import java.io.InputStream;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.mortals.xhx.common.key.RedisKey.KEY_ATTENDANCE_STAT_LOCK_CACHE;
/** /**
* 海康考勤打卡记录汇总信息 * 海康考勤打卡记录汇总信息
* *
...@@ -161,6 +164,13 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro ...@@ -161,6 +164,13 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro
} }
AddAttendThread addAttendThread = new AddAttendThread(hikService, hikEntity, getContext()); AddAttendThread addAttendThread = new AddAttendThread(hikService, hikEntity, getContext());
ThreadPool.getInstance().execute(addAttendThread); ThreadPool.getInstance().execute(addAttendThread);
/* String expire = cacheService.get(KEY_ATTENDANCE_STAT_LOCK_CACHE);
if(ObjectUtils.isEmpty(expire)){
cacheService.set(KEY_ATTENDANCE_STAT_LOCK_CACHE, "1", 60 * 60);
}else{
throw new AppException("有统计任务在运行,请稍后再试");
}*/
model.put("message_info", busiDesc + "成功"); model.put("message_info", busiDesc + "成功");
this.recordSysLog(this.request, busiDesc + " 【成功】"); this.recordSysLog(this.request, busiDesc + " 【成功】");
} catch (Exception e) { } catch (Exception e) {
......
...@@ -54,8 +54,6 @@ public class PerformAttendRecordServiceImpl extends AbstractCRUDServiceImpl<Perf ...@@ -54,8 +54,6 @@ public class PerformAttendRecordServiceImpl extends AbstractCRUDServiceImpl<Perf
@Autowired @Autowired
private CheckAttendRecordService checkAttendRecordService; private CheckAttendRecordService checkAttendRecordService;
@Autowired @Autowired
private DeptService deptService;
@Autowired
private AttendanceGroupService attendanceGroupService; private AttendanceGroupService attendanceGroupService;
@Autowired @Autowired
private AttendanceGroupFixedworkService fixedworkService; private AttendanceGroupFixedworkService fixedworkService;
...@@ -63,7 +61,6 @@ public class PerformAttendRecordServiceImpl extends AbstractCRUDServiceImpl<Perf ...@@ -63,7 +61,6 @@ public class PerformAttendRecordServiceImpl extends AbstractCRUDServiceImpl<Perf
private AttendanceClassDetailService classDetailService; private AttendanceClassDetailService classDetailService;
@Autowired @Autowired
private PerformRulesCategoryService categoryService; private PerformRulesCategoryService categoryService;
@Autowired @Autowired
private PerformRulesService rulesService; private PerformRulesService rulesService;
@Autowired @Autowired
......
...@@ -58,8 +58,6 @@ public class PerformEffectRecordServiceImpl extends AbstractCRUDServiceImpl<Perf ...@@ -58,8 +58,6 @@ public class PerformEffectRecordServiceImpl extends AbstractCRUDServiceImpl<Perf
private PerformStaffConfService performStaffConfService; private PerformStaffConfService performStaffConfService;
@Autowired @Autowired
private PerformStaffConfDetailService performStaffConfDetailService; private PerformStaffConfDetailService performStaffConfDetailService;
@Autowired
private PerformErrorRecordService errorRecordService;
@Override @Override
protected void saveBefore(PerformEffectRecordEntity entity, Context context) throws AppException { protected void saveBefore(PerformEffectRecordEntity entity, Context context) throws AppException {
......
...@@ -37,7 +37,7 @@ POST {{baseUrl}}/attendance/record/hik/addAttendanceRecord ...@@ -37,7 +37,7 @@ POST {{baseUrl}}/attendance/record/hik/addAttendanceRecord
Content-Type: application/json Content-Type: application/json
{ {
"attendanceDateStart": "2024-07-19", "attendanceDateStart": "2024-07-01",
"attendanceDateEnd": "2024-07-31" "attendanceDateEnd": "2024-07-31"
} }
......
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