Răsfoiți Sursa

【feat】【v3】
1.完善结算逻辑,增加用户信息更新和增加结算积分记录

ChenYL 11 luni în urmă
părinte
comite
485184b71e

+ 2 - 1
src/main/java/com/punchsettle/server/atomic/mapper/SettlePointsHistoryMapper.java

@@ -2,6 +2,7 @@ package com.punchsettle.server.atomic.mapper;
 
 import com.punchsettle.server.atomic.entity.SettlePointsHistory;
 import tk.mybatis.mapper.common.Mapper;
+import tk.mybatis.mapper.common.special.InsertListMapper;
 
 /**
  * @author tyuio
@@ -9,6 +10,6 @@ import tk.mybatis.mapper.common.Mapper;
  * @description 结算积分记录表 Mapper
  * @date 2025/04/08 10:30
  */
-public interface SettlePointsHistoryMapper extends Mapper<SettlePointsHistory> {
+public interface SettlePointsHistoryMapper extends Mapper<SettlePointsHistory>, InsertListMapper<SettlePointsHistory> {
 
 }

+ 10 - 0
src/main/java/com/punchsettle/server/atomic/service/ISettlePointsHistoryService.java

@@ -1,5 +1,9 @@
 package com.punchsettle.server.atomic.service;
 
+import com.punchsettle.server.atomic.entity.SettlePointsHistory;
+
+import java.util.List;
+
 /**
  * @author tyuio
  * @version 1.0.0
@@ -7,4 +11,10 @@ package com.punchsettle.server.atomic.service;
  * @description 结算积分记录表 service
  */
 public interface ISettlePointsHistoryService {
+
+    /**
+     * 批量新增
+     * @param settlePointsHistories
+     */
+    void insertList(List<SettlePointsHistory> settlePointsHistories);
 }

+ 15 - 0
src/main/java/com/punchsettle/server/atomic/service/impl/SettlePointsHistoryServiceImpl.java

@@ -1,8 +1,14 @@
 package com.punchsettle.server.atomic.service.impl;
 
+import com.punchsettle.server.atomic.entity.SettlePointsHistory;
+import com.punchsettle.server.atomic.mapper.SettlePointsHistoryMapper;
 import com.punchsettle.server.atomic.service.ISettlePointsHistoryService;
+import com.punchsettle.server.common.utils.Assert;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @author tyuio
  * @version 1.0.0
@@ -11,4 +17,13 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class SettlePointsHistoryServiceImpl implements ISettlePointsHistoryService {
+
+    @Autowired
+    private SettlePointsHistoryMapper settlePointsHistoryMapper;
+
+    @Override
+    public void insertList(List<SettlePointsHistory> settlePointsHistories) {
+        Assert.notEmpty(settlePointsHistories);
+        settlePointsHistoryMapper.insertList(settlePointsHistories);
+    }
 }

+ 2 - 1
src/main/java/com/punchsettle/server/atomic/service/impl/UserServiceImpl.java

@@ -3,6 +3,7 @@ package com.punchsettle.server.atomic.service.impl;
 import java.util.List;
 import java.util.Objects;
 
+import com.punchsettle.server.utiis.WeekendUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -70,7 +71,7 @@ public class UserServiceImpl implements IUserService {
             return List.of();
         }
 
-        Weekend<User> weekend = Weekend.of(User.class);
+        Weekend<User> weekend = WeekendUtils.createExcludeAuditFields(User.class);
         WeekendCriteria<User, Object> criteria = weekend.weekendCriteria();
         criteria.andIn(User::getId, ids);
         return userMapper.selectByExample(weekend);

+ 6 - 0
src/main/java/com/punchsettle/server/pojo/punchIn/PunchInSettleData.java

@@ -5,6 +5,7 @@ import com.punchsettle.server.atomic.entity.PiMultiTaskExt;
 import com.punchsettle.server.atomic.entity.PiMultiTaskHistory;
 import com.punchsettle.server.atomic.entity.PiStatus;
 import com.punchsettle.server.atomic.entity.PiTaskHistory;
+import com.punchsettle.server.atomic.entity.User;
 import lombok.Data;
 
 import java.util.List;
@@ -23,6 +24,11 @@ public class PunchInSettleData {
      */
     private Long userId;
 
+    /**
+     * 用户
+     */
+    private User user;
+
     /**
      * 打卡多任务
      */

+ 52 - 7
src/main/java/com/punchsettle/server/task/PunchInCoreTask.java

@@ -9,19 +9,23 @@ 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.SettlePointsHistory;
 import com.punchsettle.server.atomic.entity.StatPiTaskMonth;
 import com.punchsettle.server.atomic.entity.StatPiTaskWeek;
+import com.punchsettle.server.atomic.entity.User;
 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.ISettlePointsHistoryService;
 import com.punchsettle.server.atomic.service.IStatPiTaskMonthService;
 import com.punchsettle.server.atomic.service.IStatPiTaskWeekService;
 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.IUserService;
 import com.punchsettle.server.constant.ArchiveStatusEnum;
 import com.punchsettle.server.constant.ContinueStageEnum;
 import com.punchsettle.server.constant.ContinueStatusEnum;
@@ -152,7 +156,13 @@ public class PunchInCoreTask {
     @Autowired
     private ICalendarManager calendarManager;
 
-    public void manual(List<Long> userIds, String punchInDateStr) {
+    @Autowired
+    private IUserService userService;
+
+    @Autowired
+    private ISettlePointsHistoryService settlePointsHistoryService;
+
+    public void manual(List<Long> userIds, String punchInDateStr, Long settleTaskHistoryId) {
         List<PunchInSettleData> punchInSettleData = getPunchInSettleData(userIds, punchInDateStr);
 
         // 打卡日期
@@ -173,10 +183,15 @@ public class PunchInCoreTask {
         List<PiStatusHistory> addPiStatusHistories = new ArrayList<>();
         List<StatPiTaskWeek> addStatPiTaskWeekList = new ArrayList<>();
         List<StatPiTaskMonth> addStatPiTaskMonthList = new ArrayList<>();
+        List<SettlePointsHistory> addSettlePointsHistories = new ArrayList<>();
+        List<User> updateUserList = new ArrayList<>();
         List<PiStatus> updatePiStatusList = new ArrayList<>();
         List<PiTaskHistory> updatePunchInTaskHistories = new ArrayList<>();
         List<PiMultiTaskHistory> updatePunchInMultiTaskHistories = new ArrayList<>(punchInSettleData.size());
         for (PunchInSettleData punchInSettle : punchInSettleData) {
+            // 结算总积分
+            int settlePoints = 0;
+
             // 单任务处理部分
             for (PiTaskData piTaskData : punchInSettle.getPiTaskDataList()) {
                 PiTask piTask = piTaskData.getPiTask();
@@ -323,13 +338,13 @@ public class PunchInCoreTask {
                 int taskPoints = settleManager.calculatePointsInTask(piTask, piTaskExtList, piTaskHistory, piStatus);
                 piStatus.setPointsInWeek(piStatus.getPointsInWeek() + taskPoints);
                 piStatus.setPointsInMonth(piStatus.getPointsInMonth() + taskPoints);
-
-                // TODO 要设置结算任务执行ID
+                settlePoints += taskPoints;
 
                 // 打卡记录 更新
                 updatePiTaskHistory.setSettlePoints(taskPoints);
                 updatePiTaskHistory.setSettleResult(SettleResultEnum.SETTLED);
                 updatePiTaskHistory.setSettlePiTaskId(piTask.getId());
+                updatePiTaskHistory.setSettleTaskHistoryId(settleTaskHistoryId);
 
                 addPiStatusHistories.add(piStatusHistory);
                 updatePiStatusList.add(piStatus);
@@ -421,14 +436,40 @@ public class PunchInCoreTask {
             int multiTaskPoints = settleManager.calculatePointsInMultiTask(piMultiTask,
                 punchInSettle.getPiMultiTaskExtList(), piMultiTaskHistory,
                 punchInSettle.getPiStatus());
+            settlePoints += multiTaskPoints;
+
             updatePiMultiTaskHistory.setSettlePoints(multiTaskPoints);
             updatePiMultiTaskHistory.setSettleResult(SettleResultEnum.SETTLED);
-
-            // TODO 要设置结算任务执行ID
+            updatePiMultiTaskHistory.setSettleTaskHistoryId(settleTaskHistoryId);
             updatePunchInMultiTaskHistories.add(updatePiMultiTaskHistory);
+
+            User user = punchInSettle.getUser();
+            Integer totalPoints = Optional.ofNullable(user.getTotalPoints()).orElse(0);
+            Integer unusedPoints = Optional.ofNullable(user.getUnusedPoints()).orElse(0);
+
+            User updateUser = new User();
+            updateUser.setId(user.getId());
+            updateUser.setTotalPoints(totalPoints);
+            updateUser.setUnusedPoints(unusedPoints + settlePoints);
+            updateUserList.add(user);
+
+            SettlePointsHistory addSettlePointsHistory = new SettlePointsHistory();
+            addSettlePointsHistory.setSettleTaskHistoryId(settleTaskHistoryId);
+            addSettlePointsHistory.setUserId(user.getId());
+            addSettlePointsHistory.setSettleDate(punchInDateStr);
+            addSettlePointsHistory.setSettlePoints(settlePoints);
+            addSettlePointsHistory.setBeforeSettlePoints(totalPoints);
+            addSettlePointsHistory.setAfterSettlePoints(totalPoints + settlePoints);
+            addSettlePointsHistories.add(addSettlePointsHistory);
         }
 
         // 数据入库
+        if (!CollectionUtils.isEmpty(updateUserList)) {
+            userService.batchUpdateUser(updateUserList);
+        }
+        if (!CollectionUtils.isEmpty(addSettlePointsHistories)) {
+            settlePointsHistoryService.insertList(addSettlePointsHistories);
+        }
         if (!CollectionUtils.isEmpty(addPiStatusHistories)) {
             piStatusHistoryService.insertList(addPiStatusHistories);
         }
@@ -457,8 +498,9 @@ public class PunchInCoreTask {
      * @return
      */
     private List<PunchInSettleData> getPunchInSettleData(List<Long> userIds, String punchInDateStr) {
-        // 打卡日期
-        LocalDate punchInDate = LocalDate.parse(punchInDateStr);
+        // 用户信息, 用户ID-用户信息关联
+        List<User> users = userService.listByIds(userIds);
+        Map<Long, User> userMap = users.stream().collect(Collectors.toMap(User::getId, Function.identity(), (key1, key2) -> key1));
 
         // 获取多任务信息,用户ID-多任务关联
         PiMultiTaskQuery piMultiTaskQuery = new PiMultiTaskQuery();
@@ -532,6 +574,9 @@ public class PunchInCoreTask {
             PunchInSettleData punchInSettleData = new PunchInSettleData();
             punchInSettleData.setUserId(userId);
 
+            User user = userMap.get(userId);
+            punchInSettleData.setUser(user);
+
             PiMultiTask piMultiTask = punchInMultiTaskMap.get(userId);
             punchInSettleData.setPiMultiTask(piMultiTask);