|
@@ -40,13 +40,17 @@ import com.qunzhixinxi.hnqz.admin.api.entity.WmReportOpt;
|
|
|
import com.qunzhixinxi.hnqz.admin.api.vo.UserVO;
|
|
|
import com.qunzhixinxi.hnqz.admin.api.vo.WmScorePackageVO;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.*;
|
|
|
+import com.qunzhixinxi.hnqz.admin.entity.dto.UnpackDTO;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageApiOutput;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleInput;
|
|
|
import com.qunzhixinxi.hnqz.admin.entity.input.WmScorePackageSettleOutput;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.DelEnum;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.EnableEnum;
|
|
|
+import com.qunzhixinxi.hnqz.admin.enums.PackageStatusEnum;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.PackageTypeEnum;
|
|
|
import com.qunzhixinxi.hnqz.admin.enums.ReportEnum;
|
|
|
+import com.qunzhixinxi.hnqz.admin.enums.ScorePackageStatusEnum;
|
|
|
+import com.qunzhixinxi.hnqz.admin.enums.TaskStatusEnum;
|
|
|
import com.qunzhixinxi.hnqz.admin.mapper.*;
|
|
|
import com.qunzhixinxi.hnqz.admin.service.*;
|
|
|
import com.qunzhixinxi.hnqz.common.core.util.R;
|
|
@@ -2484,4 +2488,120 @@ public class WmScorePackageServiceImpl extends ServiceImpl<WmScorePackageMapper,
|
|
|
}
|
|
|
;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 拆包
|
|
|
+ *
|
|
|
+ * @param unpackDTO 拆包参数
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void unpack(UnpackDTO unpackDTO) {
|
|
|
+ // 原积分包
|
|
|
+ WmScorePackage scorePackage = this.getById(unpackDTO.getScorePackageId());
|
|
|
+ if (scorePackage == null) {
|
|
|
+ throw new RuntimeException("原积分包不存在");
|
|
|
+ }
|
|
|
+ if (!PackageTypeEnum.TYPE1_SCOTE_PACKAGE.val().equals(scorePackage.getPackageType1())
|
|
|
+ || !PackageTypeEnum.TYPE2_TASK_PACKAGE.val().equals(scorePackage.getPackageType2())) {
|
|
|
+ throw new RuntimeException("不支持该积分包类型");
|
|
|
+ }
|
|
|
+ // 业务校验1
|
|
|
+ if (!ScorePackageStatusEnum.TO_BE_SETTLED.val().equals(scorePackage.getScorePackageStatus())) {
|
|
|
+ throw new RuntimeException("只有“已完成待结算”的积分包可以拆包");
|
|
|
+ }
|
|
|
+ // 业务校验2
|
|
|
+ if (unpackDTO.getNewPackageScore().compareTo(scorePackage.getScore()) >= 0) {
|
|
|
+ throw new RuntimeException("“预拆包分值”不能大于“原积分包值”");
|
|
|
+ }
|
|
|
+ // 原审核通过的任务列表
|
|
|
+ QueryWrapper<WmTask> queryWrapper = Wrappers.query();
|
|
|
+ queryWrapper.eq("task_status", TaskStatusEnum.APPROVED.val());
|
|
|
+ queryWrapper.eq("score_package_id", unpackDTO.getScorePackageId());
|
|
|
+ queryWrapper.eq("del_flag", DelEnum.NOT_DEL.val());
|
|
|
+ queryWrapper.eq("real_flag", "0");
|
|
|
+ queryWrapper.orderByDesc("lookinto_date");
|
|
|
+ List<WmTask> taskList = wmTaskMapper.selectList(queryWrapper);
|
|
|
+
|
|
|
+ Set<String> taskIds = taskList.stream().map(WmTask::getId).collect(Collectors.toSet());
|
|
|
+ // 校验已选择的任务是否都在原任务中
|
|
|
+ if (!CollUtil.containsAll(taskIds, unpackDTO.getSelectTaskIds())) {
|
|
|
+ throw new RuntimeException("已选择的任务不在原任务中");
|
|
|
+ }
|
|
|
+ // 已选择的任务
|
|
|
+ List<WmTask> selectTaskList = wmTaskMapper.selectBatchIds(unpackDTO.getSelectTaskIds());
|
|
|
+ // 校验已选择的任务分值
|
|
|
+ int selectTaskScore = selectTaskList.stream().mapToInt(WmTask::getScore).sum();
|
|
|
+ if (!unpackDTO.getSelectTaskScore().equals(selectTaskScore)) {
|
|
|
+ throw new RuntimeException("已选任务分值不正确");
|
|
|
+ }
|
|
|
+ // 业务校验3
|
|
|
+ if (selectTaskScore < unpackDTO.getNewPackageScore()) {
|
|
|
+ throw new RuntimeException("已选任务分值大于预拆包分值,才能拆包");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 剩余任务
|
|
|
+ List<WmTask> remainTaskList = taskList.stream()
|
|
|
+ .filter(task -> !unpackDTO.getSelectTaskIds().contains(task.getId())).collect(Collectors.toList());
|
|
|
+ // 剩余任务分值
|
|
|
+ int remainTaskScore = remainTaskList.stream().mapToInt(WmTask::getScore).sum();
|
|
|
+ if (!unpackDTO.getRemainTaskScore().equals(remainTaskScore)) {
|
|
|
+ throw new RuntimeException("剩余任务分值不正确");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 拆包后的原积分包包值:
|
|
|
+ // 剩余任务分值 > 剩余积分包值,取剩余积分包值
|
|
|
+ // 剩余任务分值 < 剩余积分包值,取剩任务分值
|
|
|
+ int remainPackageScore;
|
|
|
+ int tempRemainPackageScore = scorePackage.getScore() - unpackDTO.getNewPackageScore();
|
|
|
+ if (remainTaskScore > tempRemainPackageScore) {
|
|
|
+ remainPackageScore = tempRemainPackageScore;
|
|
|
+ } else {
|
|
|
+ remainPackageScore = remainTaskScore;
|
|
|
+ }
|
|
|
+ if (!unpackDTO.getRemainPackageScore().equals(remainPackageScore)) {
|
|
|
+ throw new RuntimeException("剩余积分包值不正确");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ Integer operatorId = SecurityUtils.getUser().getId();
|
|
|
+ // 创建新包
|
|
|
+ WmScorePackage newScorePackage = BeanUtil.copyProperties(scorePackage, WmScorePackage.class);
|
|
|
+ newScorePackage.setId(null);
|
|
|
+ newScorePackage.setUpdateTime(null);
|
|
|
+ newScorePackage.setUpdateUser(null);
|
|
|
+ newScorePackage.setCreateTime(now);
|
|
|
+ newScorePackage.setCreateUser(operatorId);
|
|
|
+ newScorePackage.setReceiveDate(now);
|
|
|
+ newScorePackage.setScore(unpackDTO.getNewPackageScore());
|
|
|
+ newScorePackage.setScorePackageName(String.format("%s-1", scorePackage.getScorePackageName(), "1"));
|
|
|
+ this.save(newScorePackage);
|
|
|
+
|
|
|
+ // 原领包记录
|
|
|
+ WmScorePackageStatus oldScorePackageStatus = wmScorePackageStatusService.getOne(Wrappers.<WmScorePackageStatus>lambdaQuery()
|
|
|
+ .eq(WmScorePackageStatus::getPackageId, unpackDTO.getScorePackageId())
|
|
|
+ .eq(WmScorePackageStatus::getStatus, PackageStatusEnum.APPROVED.val()));
|
|
|
+ // 创建新领包记录
|
|
|
+ WmScorePackageStatus newScorePackageStatus = BeanUtil.copyProperties(oldScorePackageStatus, WmScorePackageStatus.class);
|
|
|
+ newScorePackageStatus.setPackageId(newScorePackage.getId());
|
|
|
+ newScorePackageStatus.setUserScore(String.valueOf(newScorePackage.getScore()));
|
|
|
+ newScorePackageStatus.setTaskNum(newScorePackage.getTaskNum());
|
|
|
+ newScorePackageStatus.setCreateTime(now);
|
|
|
+ newScorePackageStatus.setCreateUser(operatorId);
|
|
|
+ newScorePackageStatus.setUpdateUser(null);
|
|
|
+ newScorePackageStatus.setUpdateTime(null);
|
|
|
+ wmScorePackageStatusService.save(newScorePackageStatus);
|
|
|
+
|
|
|
+ // 任务关联到新积分包
|
|
|
+ selectTaskList.forEach(wmTask -> {
|
|
|
+ WmTask updateTask = new WmTask();
|
|
|
+ updateTask.setId(wmTask.getId());
|
|
|
+ updateTask.setScorePackageId(newScorePackage.getId());
|
|
|
+ updateTask.setUpdateUser(String.valueOf(operatorId));
|
|
|
+ updateTask.setUpdateTime(now);
|
|
|
+// updateTask.set
|
|
|
+ });
|
|
|
+ // TODO
|
|
|
+ }
|
|
|
}
|