|
|
@@ -18,6 +18,7 @@ import java.util.Set;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
+import com.punchsettle.server.pojo.punchIn.StatPiTaskQuery;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
@@ -46,9 +47,10 @@ import com.punchsettle.server.constant.PunchInResultEnum;
|
|
|
import com.punchsettle.server.constant.PunchInResultViewEnum;
|
|
|
import com.punchsettle.server.constant.PunchInSettleTypeEnum;
|
|
|
import com.punchsettle.server.constant.PunchInStatusV1Enum;
|
|
|
-import com.punchsettle.server.constant.VersionStatusEnum;
|
|
|
import com.punchsettle.server.constant.RepeatCategoryEnum;
|
|
|
+import com.punchsettle.server.constant.SettleResultEnum;
|
|
|
import com.punchsettle.server.constant.StatPeriodEnum;
|
|
|
+import com.punchsettle.server.constant.VersionStatusEnum;
|
|
|
import com.punchsettle.server.pojo.punchIn.PiTaskHistoryQuery;
|
|
|
import com.punchsettle.server.pojo.punchIn.PiTaskHistorySimpleVO;
|
|
|
import com.punchsettle.server.pojo.punchIn.PiTaskHistoryStatVO;
|
|
|
@@ -66,6 +68,7 @@ import com.punchsettle.server.pojo.punchinV1.PunchInDataVO;
|
|
|
import com.punchsettle.server.pojo.punchinV1.PunchInRecordDataVO;
|
|
|
import com.punchsettle.server.pojo.punchinV1.PunchInRecordQuery;
|
|
|
import com.punchsettle.server.pojo.punchinV1.PunchInRecordRequest;
|
|
|
+import com.punchsettle.server.service.manager.ICalendarManager;
|
|
|
import com.punchsettle.server.service.manager.IPunchInCoreManager;
|
|
|
import com.punchsettle.server.service.manager.IPunchInManager;
|
|
|
import com.punchsettle.server.service.manager.ISettleManagerV1;
|
|
|
@@ -108,6 +111,9 @@ public class PunchInManagerImpl implements IPunchInManager {
|
|
|
@Autowired
|
|
|
private IStatPiTaskMonthService statPiTaskMonthService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ICalendarManager calendarManager;
|
|
|
+
|
|
|
/**
|
|
|
* 默认显示时间00:00:00.000
|
|
|
*/
|
|
|
@@ -137,6 +143,8 @@ public class PunchInManagerImpl implements IPunchInManager {
|
|
|
String todayStr = DateUtils.YYYY_MM_DD_FORMATTER.format(today);
|
|
|
// 当前时间
|
|
|
LocalTime nowTime = LocalTime.now();
|
|
|
+ // 当前是否节假日
|
|
|
+ boolean holidayFlag = calendarManager.judgeHoliday(todayStr);
|
|
|
// 打卡任务唯一ID
|
|
|
Set<Long> taskUniqueIds = piTasks.stream().map(PiTask::getUniqueId).collect(Collectors.toSet());
|
|
|
|
|
|
@@ -161,9 +169,15 @@ public class PunchInManagerImpl implements IPunchInManager {
|
|
|
.map(piTask -> {
|
|
|
PiTaskToDoVO piTaskToDoVO = new PiTaskToDoVO();
|
|
|
BeanUtils.copyProperties(piTask, piTaskToDoVO);
|
|
|
+ piTaskToDoVO.setPunchInResult(PunchInResultEnum.UNDONE);
|
|
|
+ piTaskToDoVO.setHolidayFlag(CommonEnableStatusEnum.ENABLED.equals(piTask.getHolidayStatus()) && holidayFlag);
|
|
|
// 获取并设置已打卡记录
|
|
|
PiTaskHistory piTaskHistory = piTaskHistoryMap.get(piTask.getUniqueId());
|
|
|
if (Objects.nonNull(piTaskHistory)) {
|
|
|
+ // 判断当前的打卡结果
|
|
|
+ PunchInResultEnum punchInResult = punchInCoreManager.judgePunchInResultInTask(piTask, piTaskHistory);
|
|
|
+
|
|
|
+ piTaskToDoVO.setPunchInResult(punchInResult);
|
|
|
piTaskToDoVO.setCurrentCountTrack(piTaskHistory.getCountTrack());
|
|
|
piTaskToDoVO.setCurrentTimeTrack(piTaskHistory.getTimeTrack());
|
|
|
}
|
|
|
@@ -406,6 +420,7 @@ public class PunchInManagerImpl implements IPunchInManager {
|
|
|
tempPiTaskHistory.setTaskUniqueId(piTask.getUniqueId());
|
|
|
tempPiTaskHistory.setPunchInDate(punchInDate);
|
|
|
tempPiTaskHistory.setUserId(UserUtils.getCurrentUserId());
|
|
|
+ tempPiTaskHistory.setSettleResult(SettleResultEnum.UNSETTLED);
|
|
|
} else {
|
|
|
tempPiTaskHistory.setId(oldPiTaskHistory.getId());
|
|
|
}
|
|
|
@@ -422,7 +437,11 @@ public class PunchInManagerImpl implements IPunchInManager {
|
|
|
|
|
|
// 打卡类型:计数,需要累加打卡次数
|
|
|
if (PunchInMethodEnum.COUNT.equals(piTask.getPunchInMethod())) {
|
|
|
- tempPiTaskHistory.setCountTrack(Optional.ofNullable(oldPiTaskHistory.getCountTrack()).orElse(0) + 1);
|
|
|
+ if (Objects.isNull(oldPiTaskHistory)) {
|
|
|
+ tempPiTaskHistory.setCountTrack(1);
|
|
|
+ } else {
|
|
|
+ tempPiTaskHistory.setCountTrack(Optional.ofNullable(oldPiTaskHistory.getCountTrack()).orElse(0) + 1);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// 打卡类型:计时,需要记录最新打卡时长
|
|
|
@@ -512,16 +531,27 @@ public class PunchInManagerImpl implements IPunchInManager {
|
|
|
public PiTaskStatVO queryStat(PiTaskStatQuery query) {
|
|
|
// 当前用户ID
|
|
|
Long currentUserId = UserUtils.getCurrentUserId();
|
|
|
+ // 查找打卡任务
|
|
|
+ PiTask piTask = Optional.ofNullable(piTaskService.getById(query.getTaskId())).orElseThrow(() -> BusinessException.fail("无法查询到该打卡任务"));
|
|
|
+
|
|
|
+ // 构造查询条件
|
|
|
+ StatPiTaskQuery statPiTaskQuery = new StatPiTaskQuery();
|
|
|
+ statPiTaskQuery.setUserId(currentUserId);
|
|
|
+ statPiTaskQuery.setTaskUniqueId(piTask.getUniqueId());
|
|
|
+ statPiTaskQuery.setStatTime(query.getStatTime());
|
|
|
+
|
|
|
// 查询统计数据
|
|
|
StatPiTask statPiTask = null;
|
|
|
if (StatPeriodEnum.YEAR.equals(query.getStatPeriod())) {
|
|
|
- statPiTask = statPiTaskYearService.getByUserIdAndStatTime(currentUserId, query.getStatTime());
|
|
|
+ statPiTask = statPiTaskYearService.queryByCondition(statPiTaskQuery);
|
|
|
} else if (StatPeriodEnum.MONTH.equals(query.getStatPeriod())) {
|
|
|
- statPiTask = statPiTaskMonthService.getByUserIdAndStatTime(currentUserId, query.getStatTime());
|
|
|
+ statPiTask = statPiTaskMonthService.queryByCondition(statPiTaskQuery);
|
|
|
}
|
|
|
|
|
|
if (Objects.isNull(statPiTask)) {
|
|
|
- return null;
|
|
|
+ PiTaskStatVO piTaskStatVO = new PiTaskStatVO();
|
|
|
+ piTaskStatVO.setPiTaskHistoryStatVOS(List.of());
|
|
|
+ return piTaskStatVO;
|
|
|
}
|
|
|
|
|
|
// 查询打卡记录
|
|
|
@@ -630,6 +660,7 @@ public class PunchInManagerImpl implements IPunchInManager {
|
|
|
// 新的打卡任务信息
|
|
|
PiTask piTask = new PiTask();
|
|
|
BeanUtils.copyProperties(oldPiTask, piTask);
|
|
|
+ piTask.setId(null);
|
|
|
piTask.setTaskStatus(VersionStatusEnum.ACTIVE);
|
|
|
piTask.setTaskVersion(Optional.ofNullable(oldPiTask.getTaskVersion()).orElse(0) + 1);
|
|
|
return piTask;
|