|
|
@@ -5,13 +5,17 @@ import com.punchsettle.server.atomic.entity.PiMultiTaskExt;
|
|
|
import com.punchsettle.server.atomic.entity.PiMultiTaskHistory;
|
|
|
import com.punchsettle.server.atomic.entity.PiMultiTaskRela;
|
|
|
import com.punchsettle.server.atomic.entity.PiStatus;
|
|
|
+import com.punchsettle.server.atomic.entity.PiStatusHistory;
|
|
|
import com.punchsettle.server.atomic.entity.PiTask;
|
|
|
import com.punchsettle.server.atomic.entity.PiTaskExt;
|
|
|
import com.punchsettle.server.atomic.entity.PiTaskHistory;
|
|
|
+import com.punchsettle.server.atomic.entity.StatPiTaskMonth;
|
|
|
+import com.punchsettle.server.atomic.entity.StatPiTaskWeek;
|
|
|
import com.punchsettle.server.atomic.service.IPiMultiTaskExtService;
|
|
|
import com.punchsettle.server.atomic.service.IPiMultiTaskHistoryService;
|
|
|
import com.punchsettle.server.atomic.service.IPiMultiTaskRelaService;
|
|
|
import com.punchsettle.server.atomic.service.IPiMultiTaskService;
|
|
|
+import com.punchsettle.server.atomic.service.IPiStatusHistoryService;
|
|
|
import com.punchsettle.server.atomic.service.IStatPiTaskMonthService;
|
|
|
import com.punchsettle.server.atomic.service.IStatPiTaskWeekService;
|
|
|
import com.punchsettle.server.atomic.service.IPiStatusService;
|
|
|
@@ -37,10 +41,13 @@ import com.punchsettle.server.service.manager.IPunchInManager;
|
|
|
import com.punchsettle.server.service.manager.ISettleManager;
|
|
|
import com.punchsettle.server.utiis.DateUtils;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
-import javax.swing.text.html.Option;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.time.DayOfWeek;
|
|
|
import java.time.LocalDate;
|
|
|
import java.util.ArrayList;
|
|
|
@@ -99,35 +106,48 @@ public class PunchInCoreTask {
|
|
|
//
|
|
|
// }
|
|
|
|
|
|
+ /**
|
|
|
+ * 默认数值100
|
|
|
+ */
|
|
|
+ private static final BigDecimal ONE_HUNDRED = new BigDecimal(100);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 默认百分比 0.00%
|
|
|
+ */
|
|
|
+ private static final BigDecimal ZERO_RATE = new BigDecimal("0.00");
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IPiTaskService piTaskService;
|
|
|
+
|
|
|
@Autowired
|
|
|
- private IPiTaskService punchInTaskService;
|
|
|
+ private IPiTaskExtService piTaskExtService;
|
|
|
|
|
|
@Autowired
|
|
|
- private IPiTaskExtService punchInTaskExtService;
|
|
|
+ private IPiTaskHistoryService piTaskHistoryService;
|
|
|
|
|
|
@Autowired
|
|
|
- private IPiTaskHistoryService punchInTaskHistoryService;
|
|
|
+ private IStatPiTaskMonthService statPiTaskMonthService;
|
|
|
|
|
|
@Autowired
|
|
|
- private IStatPiTaskMonthService punchInStatsMonthService;
|
|
|
+ private IStatPiTaskWeekService statPiTaskWeekService;
|
|
|
|
|
|
@Autowired
|
|
|
- private IStatPiTaskWeekService punchInStatsWeekService;
|
|
|
+ private IPiStatusService piStatusService;
|
|
|
|
|
|
@Autowired
|
|
|
- private IPiStatusService punchInStatusService;
|
|
|
+ private IPiStatusHistoryService piStatusHistoryService;
|
|
|
|
|
|
@Autowired
|
|
|
- private IPiMultiTaskService punchInMultiTaskService;
|
|
|
+ private IPiMultiTaskService piMultiTaskService;
|
|
|
|
|
|
@Autowired
|
|
|
- private IPiMultiTaskExtService punchInMultiTaskExtService;
|
|
|
+ private IPiMultiTaskExtService piMultiTaskExtService;
|
|
|
|
|
|
@Autowired
|
|
|
- private IPiMultiTaskHistoryService punchInMultiTaskHistoryService;
|
|
|
+ private IPiMultiTaskHistoryService piMultiTaskHistoryService;
|
|
|
|
|
|
@Autowired
|
|
|
- private IPiMultiTaskRelaService punchInMultiTaskRelaService;
|
|
|
+ private IPiMultiTaskRelaService piMultiTaskRelaService;
|
|
|
|
|
|
@Autowired
|
|
|
private ICalendarManager calendarManager;
|
|
|
@@ -145,8 +165,16 @@ public class PunchInCoreTask {
|
|
|
boolean isFirstDayOfMonth = punchInDate.getDayOfMonth() == 1;
|
|
|
// 是否打卡所在月最后一天
|
|
|
boolean isLastDayOfMonth = punchInDate.getDayOfMonth() == punchInDate.lengthOfMonth();
|
|
|
-
|
|
|
- List<PiTaskHistory> updatePunchInTaskHistories = new ArrayList<>(punchInSettleData.size());
|
|
|
+ // 周期数
|
|
|
+ String yearWeek = DateUtils.getYearWeek(punchInDate);
|
|
|
+ // 月份数
|
|
|
+ String yearMonth = DateUtils.getYearMonth(punchInDate);
|
|
|
+
|
|
|
+ List<PiStatusHistory> addPiStatusHistories = new ArrayList<>();
|
|
|
+ List<StatPiTaskWeek> addStatPiTaskWeekList = new ArrayList<>();
|
|
|
+ List<StatPiTaskMonth> addStatPiTaskMonthList = new ArrayList<>();
|
|
|
+ List<PiStatus> updatePiStatusList = new ArrayList<>();
|
|
|
+ List<PiTaskHistory> updatePunchInTaskHistories = new ArrayList<>();
|
|
|
List<PiMultiTaskHistory> updatePunchInMultiTaskHistories = new ArrayList<>(punchInSettleData.size());
|
|
|
for (PunchInSettleData punchInSettle : punchInSettleData) {
|
|
|
// 单任务处理部分
|
|
|
@@ -156,6 +184,10 @@ public class PunchInCoreTask {
|
|
|
PiStatus piStatus = piTaskData.getPiStatus();
|
|
|
List<PiTaskExt> piTaskExtList = piTaskData.getPiTaskExtList();
|
|
|
|
|
|
+ // 变更前记录历史状态
|
|
|
+ PiStatusHistory piStatusHistory = new PiStatusHistory();
|
|
|
+ BeanUtils.copyProperties(piStatus, piStatusHistory);
|
|
|
+
|
|
|
PiTaskHistory updatePiTaskHistory = new PiTaskHistory();
|
|
|
updatePiTaskHistory.setId(piTaskHistory.getId());
|
|
|
|
|
|
@@ -177,55 +209,102 @@ public class PunchInCoreTask {
|
|
|
|
|
|
// 设置任务连续状态
|
|
|
ContinueStatusEnum oldTaskContinueStatus = piStatus.getTaskContinueStatus();
|
|
|
- piStatus.setTaskContinueStatus(punchInResult.equals(PunchInResultEnum.DONE) ? ContinueStatusEnum.CONTINUE : ContinueStatusEnum.INTERRUPTED);
|
|
|
- piStatus.setTaskContinueDay(oldTaskContinueStatus.equals(piStatus.getTaskContinueStatus()) ? piStatus.getTaskContinueDay() + 1 : 1);
|
|
|
+ piStatus.setTaskContinueStatus(punchInResult.equals(PunchInResultEnum.DONE)
|
|
|
+ ? ContinueStatusEnum.CONTINUE : ContinueStatusEnum.INTERRUPTED);
|
|
|
+ piStatus.setTaskContinueDay(oldTaskContinueStatus.equals(piStatus.getTaskContinueStatus())
|
|
|
+ ? piStatus.getTaskContinueDay() + 1 : 1);
|
|
|
|
|
|
// 旧的连续阶段
|
|
|
ContinueStageEnum oldContinueStage = piStatus.getContinueStage();
|
|
|
// 判断当前处于的连续阶段
|
|
|
- ContinueStageEnum continueStageResult = punchInManager.judgeContinueStageInTask(piTask, piTaskHistory, piStatus, punchInDate);
|
|
|
+ ContinueStageEnum continueStageResult =
|
|
|
+ punchInManager.judgeContinueStageInTask(piTask, piTaskHistory, piStatus, punchInDate);
|
|
|
piStatus.setContinueStage(continueStageResult);
|
|
|
// 下面3种情况不处理:宽限期 变 宽限期;正常打卡期 变 正常打卡期;惩罚期 变 惩罚期;
|
|
|
// 宽限期 变 正常打卡期,则设置阶段开始时间,重置中断次数
|
|
|
- if (ContinueStageEnum.GRACE_STAGE.equals(oldContinueStage) && ContinueStageEnum.NORMAL_STAGE.equals(continueStageResult)) {
|
|
|
+ if (ContinueStageEnum.GRACE_STAGE.equals(oldContinueStage)
|
|
|
+ && ContinueStageEnum.NORMAL_STAGE.equals(continueStageResult)) {
|
|
|
piStatus.setStageStartDate(punchInDate);
|
|
|
piStatus.setContinueInterruptedCount(0);
|
|
|
}
|
|
|
// 如果正常打卡期 变 惩罚期,则设置阶段开始时间和阶段结束时间,增加中断次数
|
|
|
- if (ContinueStageEnum.NORMAL_STAGE.equals(oldContinueStage) && ContinueStageEnum.PENALTY_STAGE.equals(continueStageResult)) {
|
|
|
+ if (ContinueStageEnum.NORMAL_STAGE.equals(oldContinueStage)
|
|
|
+ && ContinueStageEnum.PENALTY_STAGE.equals(continueStageResult)) {
|
|
|
piStatus.setStageStartDate(punchInDate);
|
|
|
piStatus.setStageEndDate(punchInDate.plusDays(piTask.getPenaltyDay()));
|
|
|
piStatus.setContinueInterruptedCount(piStatus.getContinueInterruptedCount() + 1);
|
|
|
}
|
|
|
// 如果惩罚期 变 正常打卡期,则设置阶段开始时间
|
|
|
- if (ContinueStageEnum.PENALTY_STAGE.equals(oldContinueStage) && ContinueStageEnum.NORMAL_STAGE.equals(continueStageResult)) {
|
|
|
+ if (ContinueStageEnum.PENALTY_STAGE.equals(oldContinueStage)
|
|
|
+ && ContinueStageEnum.NORMAL_STAGE.equals(continueStageResult)) {
|
|
|
piStatus.setStageStartDate(punchInDate);
|
|
|
}
|
|
|
|
|
|
+ // 周一或月初
|
|
|
+ if (isMonday || isFirstDayOfMonth) {
|
|
|
+ piStatus.setRepeatCategory(piTask.getRepeatCategory());
|
|
|
+ piStatus.setRepeatCustomDay(piTask.getRepeatCustomDay());
|
|
|
+ }
|
|
|
+
|
|
|
// 周一
|
|
|
if (isMonday) {
|
|
|
- String yearWeek = DateUtils.getYearWeek(punchInDate);
|
|
|
piStatus.setStatTimeInWeek(yearWeek);
|
|
|
|
|
|
- // TODO 需要考虑中途变换了重复频率的问题,增加一个记录实际值的字段,容错率也会跟着有影响,影响结算
|
|
|
- int PunchInTotalCountInWeek = punchInManager.getPunchInTotalCountInWeek(piTask, punchInDateStr);
|
|
|
+ // 设置本周总打卡次数
|
|
|
+ int PunchInTotalCountInWeek = punchInManager.getPunchInTotalCountInRange(piTask.getRepeatCategory(),
|
|
|
+ piTask.getRepeatCustomDay(), DateUtils.getFirstDayOfWeek(punchInDate),
|
|
|
+ DateUtils.getLastDayOfWeek(punchInDate));
|
|
|
piStatus.setPunchInTotalCountInWeek(PunchInTotalCountInWeek);
|
|
|
|
|
|
+ // 重置数据
|
|
|
piStatus.setPunchInCountInWeek(0);
|
|
|
piStatus.setPunchInDoneCountInWeek(0);
|
|
|
+ piStatus.setRepeatPrevTotalCountInWeek(0);
|
|
|
+ piStatus.setRepeatStartDateInWeek(punchInDate);
|
|
|
}
|
|
|
|
|
|
// 打卡日所在月的第一天
|
|
|
if (isFirstDayOfMonth) {
|
|
|
- String yearMonth = DateUtils.getYearMonth(punchInDate);
|
|
|
piStatus.setStatTimeInMonth(yearMonth);
|
|
|
|
|
|
- // TODO 需要考虑中途变换了重复频率的问题
|
|
|
- int PunchInTotalCountInMonth = punchInManager.getPunchInTotalCountInMonth(piTask, punchInDateStr);
|
|
|
+ // 设置本月总打卡次数
|
|
|
+ int PunchInTotalCountInMonth = punchInManager.getPunchInTotalCountInRange(piTask.getRepeatCategory(),
|
|
|
+ piTask.getRepeatCustomDay(), DateUtils.getFirstDayOfMonth(punchInDate),
|
|
|
+ DateUtils.getLastDayOfMonth(punchInDate));
|
|
|
piStatus.setPunchInTotalCountInMonth(PunchInTotalCountInMonth);
|
|
|
|
|
|
+ // 重置数据
|
|
|
piStatus.setPunchInCountInMonth(0);
|
|
|
piStatus.setPunchInDoneCountInMonth(0);
|
|
|
+ piStatus.setRepeatPrevTotalCountInMonth(0);
|
|
|
+ piStatus.setRepeatStartDateInMonth(punchInDate);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 重复类型发生变换,总打卡次数=历史真实发生的总打卡次数+变换前发生的总打卡次数+变换后可能的总打卡次数
|
|
|
+ if (!piStatus.getRepeatCategory().equals(piTask.getRepeatCategory())) {
|
|
|
+ // 历史真实发生的总打卡次数(周)
|
|
|
+ Integer oldPrevTotalCountInWeek = Optional.ofNullable(piStatus.getRepeatPrevTotalCountInWeek()).orElse(0);
|
|
|
+ // 变换前发生的总打卡次数(周)
|
|
|
+ int prevTotalCountInWeek = punchInManager.getPunchInTotalCountInRange(piStatus.getRepeatCategory(),
|
|
|
+ piStatus.getRepeatCustomDay(), piStatus.getRepeatStartDateInWeek(),
|
|
|
+ punchInDate.minusDays(1));
|
|
|
+ // 变换后可能的总打卡次数(周)
|
|
|
+ int punchInTotalCountInWeek = punchInManager.getPunchInTotalCountInRange(piTask.getRepeatCategory(), piTask.getRepeatCustomDay(), punchInDate, DateUtils.getLastDayOfWeek(punchInDate));
|
|
|
+
|
|
|
+ // 历史真实发生的总打卡次数(月)
|
|
|
+ Integer oldPrevTotalCountInMonth = Optional.ofNullable(piStatus.getRepeatPrevTotalCountInMonth()).orElse(0);
|
|
|
+ // 变换前发生的总打卡次数(月)
|
|
|
+ int prevTotalCountInMonth = punchInManager.getPunchInTotalCountInRange(piStatus.getRepeatCategory(),
|
|
|
+ piStatus.getRepeatCustomDay(), piStatus.getRepeatStartDateInMonth(),
|
|
|
+ punchInDate.minusDays(1));
|
|
|
+ // 变换后可能的总打卡次数(月 )
|
|
|
+ int punchInTotalCountInMonth = punchInManager.getPunchInTotalCountInRange(piTask.getRepeatCategory(), piTask.getRepeatCustomDay(), punchInDate, DateUtils.getLastDayOfMonth(punchInDate));
|
|
|
+
|
|
|
+ // 设置实时数据
|
|
|
+ piStatus.setRepeatPrevTotalCountInWeek(prevTotalCountInWeek + oldPrevTotalCountInWeek);
|
|
|
+ piStatus.setPunchInTotalCountInWeek(piStatus.getRepeatPrevTotalCountInWeek() + punchInTotalCountInWeek);
|
|
|
+ piStatus.setRepeatPrevTotalCountInMonth(prevTotalCountInMonth + oldPrevTotalCountInMonth);
|
|
|
+ piStatus.setPunchInTotalCountInMonth(piStatus.getRepeatPrevTotalCountInMonth() + punchInTotalCountInMonth);
|
|
|
}
|
|
|
|
|
|
// 存在打卡记录则已打卡数加1
|
|
|
@@ -240,9 +319,6 @@ public class PunchInCoreTask {
|
|
|
piStatus.setPunchInDoneCountInMonth(piStatus.getPunchInDoneCountInMonth() + 1);
|
|
|
}
|
|
|
|
|
|
- // TODO 可以考虑把年数据一起进行统计
|
|
|
- // TODO 可以考虑把统计数据一起落表
|
|
|
-
|
|
|
// 计算积分
|
|
|
int taskPoints = settleManager.calculatePointsInTask(piTask, piTaskExtList, piTaskHistory, piStatus);
|
|
|
piStatus.setPointsInWeek(piStatus.getPointsInWeek() + taskPoints);
|
|
|
@@ -253,35 +329,129 @@ public class PunchInCoreTask {
|
|
|
// 打卡记录 更新
|
|
|
updatePiTaskHistory.setSettlePoints(taskPoints);
|
|
|
updatePiTaskHistory.setSettleResult(SettleResultEnum.SETTLED);
|
|
|
- updatePiTaskHistory.setSettleTaskHistoryId(piTaskData.getPiTask().getId());
|
|
|
+ updatePiTaskHistory.setSettlePiTaskId(piTask.getId());
|
|
|
+
|
|
|
+ addPiStatusHistories.add(piStatusHistory);
|
|
|
+ updatePiStatusList.add(piStatus);
|
|
|
updatePunchInTaskHistories.add(updatePiTaskHistory);
|
|
|
+ if (isSunday) {
|
|
|
+ StatPiTaskWeek statPiTaskWeek = new StatPiTaskWeek();
|
|
|
+ statPiTaskWeek.setUserId(punchInSettle.getUserId());
|
|
|
+ statPiTaskWeek.setTaskUniqueId(piTask.getUniqueId());
|
|
|
+ statPiTaskWeek.setStatTime(piStatus.getStatTimeInWeek());
|
|
|
+ statPiTaskWeek.setPunchInTotalCount(piStatus.getPunchInTotalCountInWeek());
|
|
|
+ statPiTaskWeek.setPunchInCount(piStatus.getPunchInCountInWeek());
|
|
|
+ statPiTaskWeek.setPunchInDoneCount(piStatus.getPunchInDoneCountInWeek());
|
|
|
+ statPiTaskWeek.setPoints(piStatus.getPointsInWeek());
|
|
|
+
|
|
|
+ Integer punchInTotalCount = Optional.ofNullable(piStatus.getPunchInTotalCountInWeek()).orElse(0);
|
|
|
+ if (punchInTotalCount == 0) {
|
|
|
+ statPiTaskWeek.setPunchInRate(ZERO_RATE);
|
|
|
+ statPiTaskWeek.setPunchInDoneRate(ZERO_RATE);
|
|
|
+ } else {
|
|
|
+ Integer punchInCount = Optional.ofNullable(piStatus.getPunchInCountInWeek()).orElse(0);
|
|
|
+ Integer punchInDoneCount = Optional.ofNullable(piStatus.getPunchInDoneCountInWeek()).orElse(0);
|
|
|
+ BigDecimal totalCount = new BigDecimal(punchInTotalCount);
|
|
|
+
|
|
|
+ BigDecimal punchInRate = BigDecimal.valueOf(punchInCount).divide(totalCount, 2, RoundingMode.HALF_UP).multiply(ONE_HUNDRED);
|
|
|
+ statPiTaskWeek.setPunchInRate(punchInRate);
|
|
|
+
|
|
|
+ BigDecimal punchInDoneRate = BigDecimal.valueOf(punchInDoneCount).divide(totalCount, 2, RoundingMode.HALF_UP).multiply(ONE_HUNDRED);
|
|
|
+ statPiTaskWeek.setPunchInDoneRate(punchInDoneRate);
|
|
|
+ }
|
|
|
+
|
|
|
+ addStatPiTaskWeekList.add(statPiTaskWeek);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isLastDayOfMonth) {
|
|
|
+ StatPiTaskMonth statPiTaskMonth = new StatPiTaskMonth();
|
|
|
+ statPiTaskMonth.setUserId(punchInSettle.getUserId());
|
|
|
+ statPiTaskMonth.setTaskUniqueId(piTask.getUniqueId());
|
|
|
+ statPiTaskMonth.setStatTime(piStatus.getStatTimeInMonth());
|
|
|
+ statPiTaskMonth.setPunchInTotalCount(piStatus.getPunchInTotalCountInMonth());
|
|
|
+ statPiTaskMonth.setPunchInCount(piStatus.getPunchInCountInMonth());
|
|
|
+ statPiTaskMonth.setPunchInDoneCount(piStatus.getPunchInDoneCountInMonth());
|
|
|
+ statPiTaskMonth.setPoints(piStatus.getPointsInMonth());
|
|
|
+
|
|
|
+ Integer punchInTotalCount = Optional.ofNullable(piStatus.getPunchInTotalCountInMonth()).orElse(0);
|
|
|
+ if (punchInTotalCount == 0) {
|
|
|
+ statPiTaskMonth.setPunchInRate(ZERO_RATE);
|
|
|
+ statPiTaskMonth.setPunchInDoneRate(ZERO_RATE);
|
|
|
+ } else {
|
|
|
+ Integer punchInCount = Optional.ofNullable(piStatus.getPunchInCountInMonth()).orElse(0);
|
|
|
+ Integer punchInDoneCount = Optional.ofNullable(piStatus.getPunchInDoneCountInMonth()).orElse(0);
|
|
|
+ BigDecimal totalCount = new BigDecimal(punchInTotalCount);
|
|
|
+
|
|
|
+ BigDecimal punchInRate = BigDecimal.valueOf(punchInCount).divide(totalCount, 2, RoundingMode.HALF_UP).multiply(ONE_HUNDRED);
|
|
|
+ statPiTaskMonth.setPunchInRate(punchInRate);
|
|
|
+
|
|
|
+ BigDecimal punchInDoneRate = BigDecimal.valueOf(punchInDoneCount).divide(totalCount, 2, RoundingMode.HALF_UP).multiply(ONE_HUNDRED);
|
|
|
+ statPiTaskMonth.setPunchInDoneRate(punchInDoneRate);
|
|
|
+ }
|
|
|
+
|
|
|
+ addStatPiTaskMonthList.add(statPiTaskMonth);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+ PiMultiTask piMultiTask = punchInSettle.getPiMultiTask();
|
|
|
+ PiMultiTaskHistory piMultiTaskHistory = punchInSettle.getPiMultiTaskHistory();
|
|
|
+ PiStatus piStatus = punchInSettle.getPiStatus();
|
|
|
+
|
|
|
+ PiStatusHistory piStatusHistory = new PiStatusHistory();
|
|
|
+ BeanUtils.copyProperties(piStatus, piStatusHistory);
|
|
|
+ addPiStatusHistories.add(piStatusHistory);
|
|
|
+
|
|
|
// 多任务处理部分
|
|
|
PiMultiTaskHistory updatePiMultiTaskHistory = new PiMultiTaskHistory();
|
|
|
|
|
|
// 判断多任务打卡状态并设置
|
|
|
- PunchInResultEnum punchInResultEnumResult = punchInManager.judgePunchInResultInMultiTask(punchInSettle.getPiMultiTask(),
|
|
|
- punchInSettle.getRelaPunchInTaskHistories());
|
|
|
- punchInSettle.getPiMultiTaskHistory().setPunchInStatus(punchInResultEnumResult);
|
|
|
- updatePiMultiTaskHistory.setPunchInStatus(punchInResultEnumResult);
|
|
|
-
|
|
|
- int multiTaskPoints = settleManager.calculatePointsInMultiTask(punchInSettle.getPiMultiTask(),
|
|
|
- punchInSettle.getPiMultiTaskExtList(), punchInSettle.getPiMultiTaskHistory(),
|
|
|
- punchInSettle.getPiMultiTask());
|
|
|
+ PunchInResultEnum punchInResult = punchInManager.judgePunchInResultInMultiTask(piMultiTask, punchInSettle.getRelaPunchInTaskHistories());
|
|
|
+ piMultiTaskHistory.setPunchInResult(punchInResult);
|
|
|
+ updatePiMultiTaskHistory.setPunchInResult(punchInResult);
|
|
|
+
|
|
|
+ // 设置统计时间
|
|
|
+ piStatus.setStatusDate(punchInDateStr);
|
|
|
+ // 设置任务连续状态
|
|
|
+ ContinueStatusEnum oldTaskContinueStatus = piStatus.getTaskContinueStatus();
|
|
|
+ piStatus.setTaskContinueStatus(punchInResult.equals(PunchInResultEnum.DONE)
|
|
|
+ ? ContinueStatusEnum.CONTINUE : ContinueStatusEnum.INTERRUPTED);
|
|
|
+ piStatus.setTaskContinueDay(oldTaskContinueStatus.equals(piStatus.getTaskContinueStatus())
|
|
|
+ ? piStatus.getTaskContinueDay() + 1 : 1);
|
|
|
+
|
|
|
+ int multiTaskPoints = settleManager.calculatePointsInMultiTask(piMultiTask,
|
|
|
+ punchInSettle.getPiMultiTaskExtList(), piMultiTaskHistory,
|
|
|
+ punchInSettle.getPiStatus());
|
|
|
updatePiMultiTaskHistory.setSettlePoints(multiTaskPoints);
|
|
|
+ updatePiMultiTaskHistory.setSettleResult(SettleResultEnum.SETTLED);
|
|
|
|
|
|
- // TODO 要判断并设置结算状态
|
|
|
// TODO 要设置结算任务执行ID
|
|
|
updatePunchInMultiTaskHistories.add(updatePiMultiTaskHistory);
|
|
|
}
|
|
|
|
|
|
- punchInTaskHistoryService.batchUpdate(updatePunchInTaskHistories);
|
|
|
- punchInMultiTaskHistoryService.batchUpdate(updatePunchInMultiTaskHistories);
|
|
|
+ // 数据入库
|
|
|
+ if (!CollectionUtils.isEmpty(addPiStatusHistories)) {
|
|
|
+ piStatusHistoryService.insertList(addPiStatusHistories);
|
|
|
+ }
|
|
|
+ if (!CollectionUtils.isEmpty(addStatPiTaskWeekList)) {
|
|
|
+ statPiTaskWeekService.insertList(addStatPiTaskWeekList);
|
|
|
+ }
|
|
|
+ if (!CollectionUtils.isEmpty(addStatPiTaskMonthList)) {
|
|
|
+ statPiTaskMonthService.insertList(addStatPiTaskMonthList);
|
|
|
+ }
|
|
|
+ if (!CollectionUtils.isEmpty(updatePiStatusList)) {
|
|
|
+ piStatusService.batchUpdate(updatePiStatusList);
|
|
|
+ }
|
|
|
+ if (!CollectionUtils.isEmpty(updatePunchInTaskHistories)) {
|
|
|
+ piTaskHistoryService.batchUpdate(updatePunchInTaskHistories);
|
|
|
+ }
|
|
|
+ if (!CollectionUtils.isEmpty(updatePunchInMultiTaskHistories)) {
|
|
|
+ piMultiTaskHistoryService.batchUpdate(updatePunchInMultiTaskHistories);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取用户ID-打卡结算数据关联
|
|
|
+ *
|
|
|
* @param userIds 设计的用户
|
|
|
* @param punchInDateStr 打卡日期
|
|
|
* @return
|
|
|
@@ -294,8 +464,9 @@ public class PunchInCoreTask {
|
|
|
PiMultiTaskQuery piMultiTaskQuery = new PiMultiTaskQuery();
|
|
|
piMultiTaskQuery.setMultiTaskTaskStatus(ArchiveStatusEnum.ACTIVE);
|
|
|
piMultiTaskQuery.setUserIds(userIds);
|
|
|
- List<PiMultiTask> piMultiTasks = punchInMultiTaskService.queryByCondition(piMultiTaskQuery);
|
|
|
- Map<Long, PiMultiTask> punchInMultiTaskMap = piMultiTasks.stream().collect(Collectors.toMap(PiMultiTask::getUserId, Function.identity(), (key1, key2) -> key1));
|
|
|
+ List<PiMultiTask> piMultiTasks = piMultiTaskService.queryByCondition(piMultiTaskQuery);
|
|
|
+ Map<Long, PiMultiTask> punchInMultiTaskMap = piMultiTasks.stream()
|
|
|
+ .collect(Collectors.toMap(PiMultiTask::getUserId, Function.identity(), (key1, key2) -> key1));
|
|
|
|
|
|
// 多任务ID
|
|
|
Set<Long> multiTaskIds = piMultiTasks.stream().map(PiMultiTask::getId).collect(Collectors.toSet());
|
|
|
@@ -305,39 +476,47 @@ public class PunchInCoreTask {
|
|
|
// 获取多任务拓展信息,多任务ID-多任务拓展关联
|
|
|
PiMultiTaskExtQuery piMultiTaskExtQuery = new PiMultiTaskExtQuery();
|
|
|
piMultiTaskExtQuery.setMultiTaskIds(multiTaskIds);
|
|
|
- List<PiMultiTaskExt> piMultiTaskExtList = punchInMultiTaskExtService.queryByCondition(piMultiTaskExtQuery);
|
|
|
- Map<Long, List<PiMultiTaskExt>> punchInMultiTaskExtMap = piMultiTaskExtList.stream().collect(Collectors.groupingBy(PiMultiTaskExt::getMultiTaskId));
|
|
|
+ List<PiMultiTaskExt> piMultiTaskExtList = piMultiTaskExtService.queryByCondition(piMultiTaskExtQuery);
|
|
|
+ Map<Long, List<PiMultiTaskExt>> punchInMultiTaskExtMap =
|
|
|
+ piMultiTaskExtList.stream().collect(Collectors.groupingBy(PiMultiTaskExt::getMultiTaskId));
|
|
|
|
|
|
// 获取多任务打卡历史信息,多任务唯一ID-多任务打卡历史关联
|
|
|
PiMultiTaskHistoryQuery piMultiTaskHistoryQuery = new PiMultiTaskHistoryQuery();
|
|
|
piMultiTaskHistoryQuery.setPunchInMultiTaskUniqueIds(multiTaskUniqueIds);
|
|
|
piMultiTaskHistoryQuery.setPunchInDate(punchInDateStr);
|
|
|
- List<PiMultiTaskHistory> punchInMultiTaskHistories = punchInMultiTaskHistoryService.queryByCondition(piMultiTaskHistoryQuery);
|
|
|
- Map<Long, PiMultiTaskHistory> punchInMultiTaskHistoryMap = punchInMultiTaskHistories.stream().collect(Collectors.toMap(PiMultiTaskHistory::getMultiTaskUniqueId, Function.identity(), (key1, key2)->key1));
|
|
|
+ List<PiMultiTaskHistory> punchInMultiTaskHistories =
|
|
|
+ piMultiTaskHistoryService.queryByCondition(piMultiTaskHistoryQuery);
|
|
|
+ Map<Long, PiMultiTaskHistory> punchInMultiTaskHistoryMap = punchInMultiTaskHistories.stream().collect(
|
|
|
+ Collectors.toMap(PiMultiTaskHistory::getMultiTaskUniqueId, Function.identity(), (key1, key2) -> key1));
|
|
|
|
|
|
// 打卡任务状态,用户ID-打卡状态关联
|
|
|
PiStatusQuery piStatusQuery = new PiStatusQuery();
|
|
|
piStatusQuery.setUserIds(userIds);
|
|
|
- List<PiStatus> piStatusList = punchInStatusService.queryByCondition(piStatusQuery);
|
|
|
- Map<Long, List<PiStatus>> punchInStatusMap = piStatusList.stream().collect(Collectors.groupingBy(PiStatus::getUserId));
|
|
|
+ List<PiStatus> piStatusList = piStatusService.queryByCondition(piStatusQuery);
|
|
|
+ Map<Long, List<PiStatus>> punchInStatusMap =
|
|
|
+ piStatusList.stream().collect(Collectors.groupingBy(PiStatus::getUserId));
|
|
|
|
|
|
// 多任务关联打卡任务,多任务ID-多任务关联打卡任务关联
|
|
|
- List<PiMultiTaskRela> piMultiTaskRelaList = punchInMultiTaskRelaService.queryByMultiTaskId(multiTaskIds);
|
|
|
- Map<Long, List<PiMultiTaskRela>> punchInMultiTaskRelaMap = piMultiTaskRelaList.stream().collect(Collectors.groupingBy(PiMultiTaskRela::getPunchInMultiTaskId));
|
|
|
+ List<PiMultiTaskRela> piMultiTaskRelaList = piMultiTaskRelaService.queryByMultiTaskId(multiTaskIds);
|
|
|
+ Map<Long, List<PiMultiTaskRela>> punchInMultiTaskRelaMap =
|
|
|
+ piMultiTaskRelaList.stream().collect(Collectors.groupingBy(PiMultiTaskRela::getMultiTaskId));
|
|
|
|
|
|
// 获取打卡任务信息,打卡任务唯一ID-打卡任务关联
|
|
|
PiTaskQuery piTaskQuery = new PiTaskQuery();
|
|
|
piTaskQuery.setTaskStatus(ArchiveStatusEnum.ACTIVE);
|
|
|
+ piTaskQuery.setArchiveStatus(ArchiveStatusEnum.ACTIVE);
|
|
|
piTaskQuery.setUserIds(userIds);
|
|
|
- List<PiTask> piTasks = punchInTaskService.queryByCondition(piTaskQuery);
|
|
|
- Map<Long, PiTask> punchInTaskMap = piTasks.stream().collect(Collectors.toMap(PiTask::getUniqueId, Function.identity(), (key1, key2) -> key1));
|
|
|
+ List<PiTask> piTasks = piTaskService.queryByCondition(piTaskQuery);
|
|
|
+ Map<Long, PiTask> punchInTaskMap =
|
|
|
+ piTasks.stream().collect(Collectors.toMap(PiTask::getUniqueId, Function.identity(), (key1, key2) -> key1));
|
|
|
|
|
|
// 获取打卡记录,用户ID-打卡记录关联
|
|
|
PiTaskHistoryQuery piTaskHistoryQuery = new PiTaskHistoryQuery();
|
|
|
piTaskHistoryQuery.setPunchInDate(punchInDateStr);
|
|
|
piTaskHistoryQuery.setUserIds(userIds);
|
|
|
- List<PiTaskHistory> punchInTaskHistories = punchInTaskHistoryService.queryByCondition(piTaskHistoryQuery);
|
|
|
- Map<Long, List<PiTaskHistory>> punchInTaskHistoryMap = punchInTaskHistories.stream().collect(Collectors.groupingBy(PiTaskHistory::getUserId));
|
|
|
+ List<PiTaskHistory> punchInTaskHistories = piTaskHistoryService.queryByCondition(piTaskHistoryQuery);
|
|
|
+ Map<Long, List<PiTaskHistory>> punchInTaskHistoryMap =
|
|
|
+ punchInTaskHistories.stream().collect(Collectors.groupingBy(PiTaskHistory::getUserId));
|
|
|
|
|
|
// 打卡任务ID
|
|
|
Set<Long> punchInTaskIds = piTasks.stream().map(PiTask::getId).collect(Collectors.toSet());
|
|
|
@@ -345,8 +524,9 @@ public class PunchInCoreTask {
|
|
|
// 获取打卡任务拓展表,打卡任务ID-打卡任务拓展关联
|
|
|
PiTaskExtQuery piTaskExtQuery = new PiTaskExtQuery();
|
|
|
piTaskExtQuery.setPunchInTaskIds(punchInTaskIds);
|
|
|
- List<PiTaskExt> piTaskExtList = punchInTaskExtService.queryByCondition(piTaskExtQuery);
|
|
|
- Map<Long, List<PiTaskExt>> punchInTaskExtGroupList = piTaskExtList.stream().collect(Collectors.groupingBy(PiTaskExt::getPunchInTaskId));
|
|
|
+ List<PiTaskExt> piTaskExtList = piTaskExtService.queryByCondition(piTaskExtQuery);
|
|
|
+ Map<Long, List<PiTaskExt>> punchInTaskExtGroupList =
|
|
|
+ piTaskExtList.stream().collect(Collectors.groupingBy(PiTaskExt::getTaskId));
|
|
|
|
|
|
return userIds.stream().map(userId -> {
|
|
|
PunchInSettleData punchInSettleData = new PunchInSettleData();
|
|
|
@@ -362,13 +542,17 @@ public class PunchInCoreTask {
|
|
|
punchInSettleData.setPiMultiTaskHistory(piMultiTaskHistory);
|
|
|
|
|
|
List<PiStatus> tempPiStatusList = punchInStatusMap.get(userId);
|
|
|
- PiStatus piStatusInMultiTask = tempPiStatusList.stream().filter(v -> Objects.nonNull(v.getMultiTaskUniqueId())).findFirst().get();
|
|
|
+ PiStatus piStatusInMultiTask =
|
|
|
+ tempPiStatusList.stream().filter(v -> Objects.nonNull(v.getMultiTaskUniqueId())).findFirst().get();
|
|
|
punchInSettleData.setPiStatus(piStatusInMultiTask);
|
|
|
|
|
|
List<PiMultiTaskRela> tempPiMultiTaskRelaList = punchInMultiTaskRelaMap.get(piMultiTask.getId());
|
|
|
- Set<Long> relaContainTaskIdList = tempPiMultiTaskRelaList.stream().map(PiMultiTaskRela::getTaskId).collect(Collectors.toSet());
|
|
|
+ Set<Long> relaContainTaskIdList =
|
|
|
+ tempPiMultiTaskRelaList.stream().map(PiMultiTaskRela::getTaskId).collect(Collectors.toSet());
|
|
|
|
|
|
- Map<Long, PiStatus> punchInStatusInTaskMap = tempPiStatusList.stream().filter(v -> Objects.nonNull(v.getTaskUniqueId())).collect(Collectors.toMap(PiStatus::getTaskUniqueId, Function.identity(), (key1, key2) -> key1));
|
|
|
+ Map<Long, PiStatus> punchInStatusInTaskMap =
|
|
|
+ tempPiStatusList.stream().filter(v -> Objects.nonNull(v.getTaskUniqueId()))
|
|
|
+ .collect(Collectors.toMap(PiStatus::getTaskUniqueId, Function.identity(), (key1, key2) -> key1));
|
|
|
|
|
|
List<PiTaskHistory> tempPunchInTaskHistories = punchInTaskHistoryMap.get(userId);
|
|
|
List<PiTaskData> piTaskDataList = new ArrayList<>(tempPunchInTaskHistories.size());
|