|
|
@@ -25,9 +25,11 @@ import org.springframework.util.StringUtils;
|
|
|
import com.punchsettle.server.atomic.StatPiTask;
|
|
|
import com.punchsettle.server.atomic.entity.PiStatus;
|
|
|
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.SettleTaskRelaHistory;
|
|
|
import com.punchsettle.server.atomic.service.IPiStatusService;
|
|
|
+import com.punchsettle.server.atomic.service.IPiTaskExtService;
|
|
|
import com.punchsettle.server.atomic.service.IPiTaskHistoryService;
|
|
|
import com.punchsettle.server.atomic.service.IPiTaskService;
|
|
|
import com.punchsettle.server.atomic.service.ISettleTaskRelaHistoryService;
|
|
|
@@ -39,6 +41,7 @@ import com.punchsettle.server.common.utils.Assert;
|
|
|
import com.punchsettle.server.constant.ArchiveStatusEnum;
|
|
|
import com.punchsettle.server.constant.CacheNameConstant;
|
|
|
import com.punchsettle.server.constant.ContinueStatusEnum;
|
|
|
+import com.punchsettle.server.constant.PunchInDimensionEnum;
|
|
|
import com.punchsettle.server.constant.PunchInExtraMethodEnum;
|
|
|
import com.punchsettle.server.constant.PunchInMethodEnum;
|
|
|
import com.punchsettle.server.constant.PunchInResultEnum;
|
|
|
@@ -47,6 +50,8 @@ 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.PiTaskExtDto;
|
|
|
+import com.punchsettle.server.pojo.punchIn.PiTaskExtQuery;
|
|
|
import com.punchsettle.server.pojo.punchIn.PiTaskHistoryQuery;
|
|
|
import com.punchsettle.server.pojo.punchIn.PiTaskHistorySimpleVO;
|
|
|
import com.punchsettle.server.pojo.punchIn.PiTaskHistoryVO;
|
|
|
@@ -111,6 +116,9 @@ public class PunchInManagerImpl implements IPunchInManager {
|
|
|
@Autowired
|
|
|
private ISettleTaskRelaHistoryService settleTaskRelaHistoryService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IPiTaskExtService piTaskExtService;
|
|
|
+
|
|
|
/**
|
|
|
* 默认时间00:00:00.000
|
|
|
*/
|
|
|
@@ -282,11 +290,39 @@ public class PunchInManagerImpl implements IPunchInManager {
|
|
|
@Override
|
|
|
public PiTaskVO queryTask(Long id) {
|
|
|
Assert.isNullInBusiness(id, "请传入待查询的任务ID");
|
|
|
- return Optional.ofNullable(piTaskService.getById(id)).map(piTask -> {
|
|
|
- PiTaskVO piTaskVO = new PiTaskVO();
|
|
|
- BeanUtils.copyProperties(piTask, piTaskVO);
|
|
|
+
|
|
|
+ PiTaskVO piTaskVO = new PiTaskVO();
|
|
|
+
|
|
|
+ // 获取打卡任务
|
|
|
+ PiTask piTask = Optional.ofNullable(piTaskService.getById(id)).orElseThrow(() -> BusinessException.fail("无法查询到该打卡任务"));
|
|
|
+ BeanUtils.copyProperties(piTask, piTaskVO);
|
|
|
+
|
|
|
+ // 获取拓展信息
|
|
|
+ PiTaskExtQuery piTaskExtQuery = new PiTaskExtQuery();
|
|
|
+ piTaskExtQuery.setPunchInTaskIds(Arrays.asList(piTask.getId()));
|
|
|
+ List<PiTaskExt> piTaskExtList = piTaskExtService.queryByCondition(piTaskExtQuery);
|
|
|
+ // 没有拓展信息直接返回
|
|
|
+ if (CollectionUtils.isEmpty(piTaskExtList)) {
|
|
|
return piTaskVO;
|
|
|
- }).orElseThrow(() -> BusinessException.fail("无法查询到该打卡任务"));
|
|
|
+ }
|
|
|
+
|
|
|
+ // 拓展信息(当天打卡)
|
|
|
+ List<PiTaskExtDto> taskExtList = piTaskExtList.stream().filter(piTaskExt -> PunchInDimensionEnum.ONE_DAY.equals(piTaskExt.getDimension())).map(piTaskExt -> {
|
|
|
+ PiTaskExtDto piTaskExtDto = new PiTaskExtDto();
|
|
|
+ BeanUtils.copyProperties(piTaskExt, piTaskExtDto);
|
|
|
+ return piTaskExtDto;
|
|
|
+ }).toList();
|
|
|
+ piTaskVO.setTaskExtList(taskExtList);
|
|
|
+
|
|
|
+ // 拓展信息(连续打卡)
|
|
|
+ List<PiTaskExtDto> continueTaskExtList = piTaskExtList.stream().filter(piTaskExt -> PunchInDimensionEnum.MULTI_DAY.equals(piTaskExt.getDimension())).map(piTaskExt -> {
|
|
|
+ PiTaskExtDto piTaskExtDto = new PiTaskExtDto();
|
|
|
+ BeanUtils.copyProperties(piTaskExt, piTaskExtDto);
|
|
|
+ return piTaskExtDto;
|
|
|
+ }).toList();
|
|
|
+ piTaskVO.setContinueTaskExtList(continueTaskExtList);
|
|
|
+
|
|
|
+ return piTaskVO;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -329,15 +365,31 @@ public class PunchInManagerImpl implements IPunchInManager {
|
|
|
if (PunchInExtraMethodEnum.FIXED.equals(request.getExtraMethod()) && Objects.isNull(request.getExtraPoints())) {
|
|
|
throw BusinessException.fail("额外奖励方式为固定,额外奖励积分不能为空");
|
|
|
}
|
|
|
- if (PunchInExtraMethodEnum.INTERVAL.equals(request.getExtraMethod()) && CollectionUtils.isEmpty(request.getTaskExtList())) {
|
|
|
- throw BusinessException.fail("额外奖励方式为区间,积分区间信息不能为空");
|
|
|
+ if (PunchInExtraMethodEnum.INTERVAL.equals(request.getExtraMethod())) {
|
|
|
+ if (CollectionUtils.isEmpty(request.getTaskExtList())) {
|
|
|
+ throw BusinessException.fail("额外奖励方式为区间,积分区间信息不能为空");
|
|
|
+ }
|
|
|
+ Map<Integer, List<PiTaskExtDto>> initialValueMap = request.getTaskExtList().stream().collect(Collectors.groupingBy(PiTaskExtDto::getInitialValue));
|
|
|
+ for (List<PiTaskExtDto> value : initialValueMap.values()) {
|
|
|
+ if (value.size() > 1) {
|
|
|
+ throw BusinessException.fail("任务积分区间不能有重复的起始值");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
if (CommonEnableStatusEnum.ENABLED.equals(request.getContinueStatus()) && (Objects.isNull(request.getGraceDay()) || Objects.isNull(request.getContinueInterruptedCount()) || Objects.isNull(request.getPenaltyDay()))) {
|
|
|
throw BusinessException.fail("启用了连续规则,宽限期、连续中断次数、惩罚天数不能为空");
|
|
|
}
|
|
|
- if (CommonEnableStatusEnum.ENABLED.equals(request.getTaskPointsStatus()) && CollectionUtils.isEmpty(request.getContinueTaskExtList())) {
|
|
|
- throw BusinessException.fail("启用了任务积分计算,连续任务积分区间信息不能为空");
|
|
|
+ if (CommonEnableStatusEnum.ENABLED.equals(request.getTaskPointsStatus())) {
|
|
|
+ if (CollectionUtils.isEmpty(request.getContinueTaskExtList())) {
|
|
|
+ throw BusinessException.fail("启用了任务积分计算,连续任务积分区间信息不能为空");
|
|
|
+ }
|
|
|
+ Map<Integer, List<PiTaskExtDto>> initialValueMap = request.getContinueTaskExtList().stream().collect(Collectors.groupingBy(PiTaskExtDto::getInitialValue));
|
|
|
+ for (List<PiTaskExtDto> value : initialValueMap.values()) {
|
|
|
+ if (value.size() > 1) {
|
|
|
+ throw BusinessException.fail("连续任务积分区间不能有重复的起始值");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
if (Objects.nonNull(request.getAutoArchiveDate()) && request.getAutoArchiveDate().isBefore(today)) {
|
|
|
throw BusinessException.fail("任务自动归档时间无效,必需大于等于当前时间");
|
|
|
@@ -351,6 +403,28 @@ public class PunchInManagerImpl implements IPunchInManager {
|
|
|
addPiTask.setTaskVersion(0);
|
|
|
addPiTask.setArchiveStatus(ArchiveStatusEnum.ACTIVE);
|
|
|
|
|
|
+ // 拓展信息(当天打卡)
|
|
|
+ List<PiTaskExt> taskExtList = Optional.ofNullable(request.getTaskExtList()).orElse(List.of()).stream()
|
|
|
+ .sorted(Comparator.comparing(PiTaskExtDto::getInitialValue))
|
|
|
+ .map(piTaskExtDto -> {
|
|
|
+ PiTaskExt piTaskExt = new PiTaskExt();
|
|
|
+ BeanUtils.copyProperties(piTaskExtDto, piTaskExt);
|
|
|
+ piTaskExt.setUserId(currentUserId);
|
|
|
+ piTaskExt.setDimension(PunchInDimensionEnum.ONE_DAY);
|
|
|
+ return piTaskExt;
|
|
|
+ }).toList();
|
|
|
+
|
|
|
+ // 拓展信息(连续打卡)
|
|
|
+ List<PiTaskExt> continueTaskExtList = Optional.ofNullable(request.getContinueTaskExtList()).orElse(List.of()).stream()
|
|
|
+ .sorted(Comparator.comparing(PiTaskExtDto::getInitialValue))
|
|
|
+ .map(piTaskExtDto -> {
|
|
|
+ PiTaskExt piTaskExt = new PiTaskExt();
|
|
|
+ BeanUtils.copyProperties(piTaskExtDto, piTaskExt);
|
|
|
+ piTaskExt.setUserId(currentUserId);
|
|
|
+ piTaskExt.setDimension(PunchInDimensionEnum.MULTI_DAY);
|
|
|
+ return piTaskExt;
|
|
|
+ }).toList();
|
|
|
+
|
|
|
// 如果任务已存在,则更新任务版本号、设置唯一ID、旧数据归档
|
|
|
if (Objects.nonNull(request.getId())) {
|
|
|
PiTask piTask = Optional.ofNullable(piTaskService.getById(request.getId())).orElseThrow(() -> BusinessException.fail("无法查询到该打卡任务"));
|
|
|
@@ -378,6 +452,15 @@ public class PunchInManagerImpl implements IPunchInManager {
|
|
|
|
|
|
// 保存数据
|
|
|
piTaskService.insert(addPiTask);
|
|
|
+ if (!CollectionUtils.isEmpty(taskExtList)) {
|
|
|
+ taskExtList.forEach(v -> v.setTaskId(addPiTask.getId()));
|
|
|
+ piTaskExtService.batchAdd(taskExtList);
|
|
|
+ }
|
|
|
+ if (!CollectionUtils.isEmpty(continueTaskExtList)) {
|
|
|
+ continueTaskExtList.forEach(v -> v.setTaskId(addPiTask.getId()));
|
|
|
+ piTaskExtService.batchAdd(continueTaskExtList);
|
|
|
+ }
|
|
|
+
|
|
|
// 如果首次保存,需要设置唯一ID
|
|
|
if (Objects.isNull(addPiTask.getUniqueId())) {
|
|
|
PiTask updatePiTask = new PiTask();
|