瀏覽代碼

1、完善积分累加累减逻辑

rayson 1 年之前
父節點
當前提交
da899e9a1e
共有 19 個文件被更改,包括 169 次插入94 次删除
  1. 1 1
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/admin/event/EventTrackController.java
  2. 1 4
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/event/EventRecordPageReqVO.java
  3. 1 5
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/event/EventRecordRespVO.java
  4. 1 5
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/event/EventRecordSaveReqVO.java
  5. 1 5
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/dal/dataobject/event/EventRecordDO.java
  6. 2 1
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/dal/mysql/config/PointRuleConfigMapper.java
  7. 10 5
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/dal/mysql/event/EventRecordMapper.java
  8. 1 1
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/config/PointRuleConfigService.java
  9. 4 2
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/config/PointRuleConfigServiceImpl.java
  10. 8 0
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/event/EventRecordService.java
  11. 43 16
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/event/EventRecordServiceImpl.java
  12. 1 1
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/event/EventTrackService.java
  13. 66 41
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/event/EventTrackServiceImpl.java
  14. 2 0
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/record/PointRecordService.java
  15. 8 3
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/record/PointRecordServiceImpl.java
  16. 1 0
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/signin/SignInRecordServiceImpl.java
  17. 7 0
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/user/UserPointService.java
  18. 11 0
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/user/UserPointServiceImpl.java
  19. 0 4
      menduner/menduner-reward-biz/src/test/java/com/citu/module/menduner/reward/service/event/EventRecordServiceImplTest.java

+ 1 - 1
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/admin/event/EventTrackController.java

@@ -40,7 +40,7 @@ public class EventTrackController {
     @PreAuthenticated
     @PostMapping("/click")
     @Operation(summary = "点击")
-    public CommonResult<EventTrackPointRespVO> click(@RequestParam("url") String url) {
+    public CommonResult<EventTrackPointRespVO> click(@RequestParam("url") String url) throws Exception {
         return success(service.click(url));
     }
 

+ 1 - 4
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/event/EventRecordPageReqVO.java

@@ -18,14 +18,11 @@ import static com.citu.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DA
 public class EventRecordPageReqVO extends PageParam {
 
     @Schema(description = "用户id", example = "4194")
-    private String userId;
+    private Long userId;
 
     @Schema(description = "事件地址", example = "https://www.iocoder.cn")
     private String url;
 
-    @Schema(description = "事件指标id", example = "29779")
-    private Long metricId;
-
     @Schema(description = "日期")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] date;

+ 1 - 5
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/event/EventRecordRespVO.java

@@ -19,16 +19,12 @@ public class EventRecordRespVO {
 
     @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "4194")
     @ExcelProperty("用户id")
-    private String userId;
+    private Long userId;
 
     @Schema(description = "事件地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn")
     @ExcelProperty("事件地址")
     private String url;
 
-    @Schema(description = "事件指标id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29779")
-    @ExcelProperty("事件指标id")
-    private Long metricId;
-
     @Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED)
     @ExcelProperty("日期")
     private LocalDateTime date;

+ 1 - 5
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/event/EventRecordSaveReqVO.java

@@ -16,16 +16,12 @@ public class EventRecordSaveReqVO {
 
     @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "4194")
     @NotEmpty(message = "用户id不能为空")
-    private String userId;
+    private Long userId;
 
     @Schema(description = "事件地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn")
     @NotEmpty(message = "事件地址不能为空")
     private String url;
 
-    @Schema(description = "事件指标id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29779")
-    @NotNull(message = "事件指标id不能为空")
-    private Long metricId;
-
     @Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotNull(message = "日期不能为空")
     private LocalDateTime date;

+ 1 - 5
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/dal/dataobject/event/EventRecordDO.java

@@ -31,15 +31,11 @@ public class EventRecordDO extends BaseDO {
     /**
      * 用户id
      */
-    private String userId;
+    private Long userId;
     /**
      * 事件地址
      */
     private String url;
-    /**
-     * 事件指标id
-     */
-    private Long metricId;
     /**
      * 日期
      */

+ 2 - 1
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/dal/mysql/config/PointRuleConfigMapper.java

@@ -29,9 +29,10 @@ public interface PointRuleConfigMapper extends BaseMapperX<PointRuleConfigDO> {
                 .orderByDesc(PointRuleConfigDO::getUpdateTime));
     }
 
-    default List<PointRuleConfigDO> selectList() {
+    default List<PointRuleConfigDO> selectDistinctUrlList() {
         return selectList(new LambdaQueryWrapperX<PointRuleConfigDO>()
                 .eq(PointRuleConfigDO::getStatus, PointRuleConfigStatusEnum.ENABLE.getStatus())
+                .groupBy(PointRuleConfigDO::getUrl)
                 .orderByDesc(PointRuleConfigDO::getUpdateTime));
     }
 

+ 10 - 5
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/dal/mysql/event/EventRecordMapper.java

@@ -23,17 +23,15 @@ public interface EventRecordMapper extends BaseMapperX<EventRecordDO> {
         return selectPage(reqVO, new LambdaQueryWrapperX<EventRecordDO>()
                 .eqIfPresent(EventRecordDO::getUserId, reqVO.getUserId())
                 .eqIfPresent(EventRecordDO::getUrl, reqVO.getUrl())
-                .eqIfPresent(EventRecordDO::getMetricId, reqVO.getMetricId())
                 .betweenIfPresent(EventRecordDO::getDate, reqVO.getDate())
                 .betweenIfPresent(EventRecordDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(EventRecordDO::getId));
     }
 
-    default List<EventRecordDO> getList(Long userId, String url, Long metricId, LocalDateTime startDate, LocalDateTime endDate) {
+    default List<EventRecordDO> getList(Long userId, String url,  LocalDateTime startDate, LocalDateTime endDate) {
         LambdaQueryWrapperX<EventRecordDO> wrapperX = new LambdaQueryWrapperX<EventRecordDO>();
         wrapperX.eq(EventRecordDO::getUserId, userId)
-                .eq(EventRecordDO::getUrl, url)
-                .eq(EventRecordDO::getMetricId, metricId);
+                .eq(EventRecordDO::getUrl, url);
 
         if (null != startDate) {
             wrapperX.le(EventRecordDO::getDate, startDate);
@@ -46,5 +44,12 @@ public interface EventRecordMapper extends BaseMapperX<EventRecordDO> {
         return selectList(wrapperX);
     }
 
-
+    // 根据用户ID、地址、指标ID、当天时间查询事件记录
+    default EventRecordDO get(Long userId, String url, LocalDateTime date) {
+        LambdaQueryWrapperX<EventRecordDO> wrapperX = new LambdaQueryWrapperX<EventRecordDO>();
+        wrapperX.eq(EventRecordDO::getUserId, userId)
+                .eq(EventRecordDO::getUrl, url)
+                .eq(EventRecordDO::getDate, date);
+        return selectOne(wrapperX);
+    }
 }

+ 1 - 1
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/config/PointRuleConfigService.java

@@ -65,7 +65,7 @@ public interface PointRuleConfigService {
      * 获取已上线的积分规则配置
      * @return 积分规则配置集合
      */
-    List<PointRuleConfigDO> getList();
+    List<PointRuleConfigDO> selectDistinctUrlList();
 
     /**
      * 开启规则

+ 4 - 2
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/config/PointRuleConfigServiceImpl.java

@@ -99,8 +99,8 @@ public class PointRuleConfigServiceImpl implements PointRuleConfigService {
     }
 
     @Override
-    public List<PointRuleConfigDO> getList() {
-        return mapper.selectList();
+    public List<PointRuleConfigDO> selectDistinctUrlList() {
+        return mapper.selectDistinctUrlList();
     }
 
     private PointRuleConfigDO valid(Long id) {
@@ -115,6 +115,7 @@ public class PointRuleConfigServiceImpl implements PointRuleConfigService {
 
     @Override
     @DSTransactional
+    @CacheEvict(value = RedisKeyConstants.POINT_RULE_CONFIG, allEntries = true)
     public boolean enable(List<Long> ids) {
         for (Long id : ids) {
             PointRuleConfigDO configDO = valid(id);
@@ -129,6 +130,7 @@ public class PointRuleConfigServiceImpl implements PointRuleConfigService {
 
     @Override
     @DSTransactional
+    @CacheEvict(value = RedisKeyConstants.POINT_RULE_CONFIG, allEntries = true)
     public boolean disable(List<Long> ids) {
         for (Long id : ids) {
             PointRuleConfigDO configDO = valid(id);

+ 8 - 0
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/event/EventRecordService.java

@@ -63,4 +63,12 @@ public interface EventRecordService {
      * @return 事件记录分页
      */
     Integer getEventCount(Long userId, String url, String metricValue);
+
+    /**
+     * 创建事件记录
+     *
+     * @param userId      用户id
+     * @param url         事件地址
+     */
+    void createEventRecord(Long userId, String url);
 }

+ 43 - 16
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/event/EventRecordServiceImpl.java

@@ -9,7 +9,7 @@ import com.citu.module.menduner.reward.controller.base.event.EventRecordSaveReqV
 import com.citu.module.menduner.reward.dal.dataobject.event.EventMetricDO;
 import com.citu.module.menduner.reward.dal.dataobject.event.EventRecordDO;
 import com.citu.module.menduner.reward.dal.mysql.event.EventRecordMapper;
-import com.mzt.logapi.service.impl.DefaultLogRecordServiceImpl;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
@@ -28,6 +28,7 @@ import static com.citu.module.menduner.reward.enums.EventMetricConstants.*;
  *
  * @author Rayson
  */
+@Slf4j
 @Service
 @Validated
 public class EventRecordServiceImpl implements EventRecordService {
@@ -81,36 +82,62 @@ public class EventRecordServiceImpl implements EventRecordService {
         return eventRecordMapper.selectPage(pageReqVO);
     }
 
-    @Override
-    public Integer getEventCount(Long userId, String url, String metricValue) {
-        LocalDateTime startDate = null;
-        LocalDateTime endDate = null;
+    public LocalDateTime[] generateDateRange(EventMetricDO eventMetric) {
+        LocalDateTime[] dateRange = new LocalDateTime[2];
         LocalDate date = LocalDate.now();
-        EventMetricDO eventMetric = eventMetricService.getByValue(metricValue);
-
         switch (eventMetric.getValue()) {
             case TODAY:
-                startDate = date.atStartOfDay();
-                endDate = date.atTime(LocalTime.MAX);
+                dateRange[0] = date.atStartOfDay();
+                dateRange[1] = date.atTime(LocalTime.MAX);
                 break;
             case MONTH:
-                startDate = date.withDayOfMonth(1).atStartOfDay();
-                endDate = date.withDayOfMonth(date.lengthOfMonth()).atTime(LocalTime.MAX);
+                dateRange[0] = date.withDayOfMonth(1).atStartOfDay();
+                dateRange[1] = date.withDayOfMonth(date.lengthOfMonth()).atTime(LocalTime.MAX);
                 break;
             case YEAR:
-                startDate = date.withDayOfYear(1).atStartOfDay();
-                endDate = date.withDayOfYear(date.lengthOfYear()).atTime(LocalTime.MAX);
+                dateRange[0] = date.withDayOfYear(1).atStartOfDay();
+                dateRange[1] = date.withDayOfYear(date.lengthOfYear()).atTime(LocalTime.MAX);
                 break;
             case TOTAL:
                 break;
             default:
-                throw new IllegalStateException("Unexpected value: " + eventMetric.getValue());
+                log.info("Unexpected value: {}", eventMetric.getValue());
         }
 
-        List<EventRecordDO> list = eventRecordMapper.getList(userId, url, eventMetric.getId(), startDate, endDate);
-        if(ObjectUtil.isEmpty(list)) {
+        return dateRange;
+    }
+
+    @Override
+    public Integer getEventCount(Long userId, String url, String metricValue) {
+        //TODO 加上缓存 从缓存调用
+        EventMetricDO eventMetric = eventMetricService.getByValue(metricValue);
+        LocalDateTime[] dateRange = generateDateRange(eventMetric);
+        List<EventRecordDO> list = eventRecordMapper.getList(userId, url, dateRange[0], dateRange[1]);
+        if (ObjectUtil.isEmpty(list)) {
             return 0;
         }
         return list.stream().mapToInt(EventRecordDO::getCount).sum();
     }
+
+    @Override
+    public void createEventRecord(Long userId, String url) {
+        //TODO 加上缓存 读写一致
+        // 查询今天记录
+        EventRecordDO record =
+                eventRecordMapper.get(userId, url, LocalDate.now().atStartOfDay());
+        if(null == record) {
+            // 没有今天的记录
+            //新增
+            eventRecordMapper.insert(EventRecordDO.builder()
+                    .userId(userId)
+                    .url(url)
+                    .date(LocalDate.now().atStartOfDay())
+                    .count(1)
+                    .build());
+        }else {
+            // 修改次数
+            record.setCount(record.getCount() + 1);
+            eventRecordMapper.updateById(record);
+        }
+    }
 }

+ 1 - 1
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/event/EventTrackService.java

@@ -21,7 +21,7 @@ public interface EventTrackService {
      * 点击事件跟踪
      * @param url
      **/
-    EventTrackPointRespVO click(String url);
+    EventTrackPointRespVO click(String url) throws Exception;
 
     /**
      * 获取menduner相关服务的url地址

+ 66 - 41
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/event/EventTrackServiceImpl.java

@@ -1,5 +1,6 @@
 package com.citu.module.menduner.reward.service.event;
 
+import com.baomidou.dynamic.datasource.tx.LocalTxUtil;
 import com.citu.framework.security.core.LoginUser;
 import com.citu.module.menduner.common.util.LoginUserContext;
 import com.citu.module.menduner.reward.controller.base.common.TreeRespVO;
@@ -19,6 +20,7 @@ import com.citu.module.menduner.reward.service.config.PointRuleConfigService;
 import com.citu.module.menduner.reward.service.record.PointRecordService;
 import com.citu.module.menduner.system.api.url.MendunerSystemUrlApi;
 import com.citu.module.menduner.system.api.url.UrlInfoRespVO;
+import lombok.extern.slf4j.Slf4j;
 import org.jeasy.rules.api.Facts;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
@@ -28,6 +30,7 @@ import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 
 import static com.citu.module.menduner.reward.enums.EasyRulesConstants.*;
@@ -37,6 +40,7 @@ import static com.citu.module.menduner.reward.enums.EasyRulesConstants.*;
  *
  * @author rayson
  **/
+@Slf4j
 @Service
 @Validated
 public class EventTrackServiceImpl implements EventTrackService {
@@ -88,7 +92,7 @@ public class EventTrackServiceImpl implements EventTrackService {
 
     @Override
     public List<EventTrackUrlRespVO> getEventTrackList() {
-        List<PointRuleConfigDO> list = ruleConfigService.getList();
+        List<PointRuleConfigDO> list = ruleConfigService.selectDistinctUrlList();
         return PointRuleConfigConvert.INSTANCE.convertList(list);
     }
 
@@ -99,51 +103,72 @@ public class EventTrackServiceImpl implements EventTrackService {
     }
 
     @Override
-    public EventTrackPointRespVO click(String url) {
+    public EventTrackPointRespVO click(String url) throws Exception {
+        AtomicBoolean state = new AtomicBoolean(true);
+        String xid = LocalTxUtil.startTransaction();
         // 初始化响应对象
         EventTrackPointRespVO respVO = new EventTrackPointRespVO();
+        try {
 
-        // 获取当前登录用户信息
-        LoginUser loginUser = LoginUserContext.get2();
-        if (null == loginUser) {
-            // 如果用户未登录,返回空
-            return null;
-        }
-
-        // 根据URL获取积分规则配置信息
-        PointRuleConfigDO config = ruleConfigService.getByUrl(url);
-        if (null == config) {
-            // 如果配置信息不存在,返回空
-            return null;
-        }
+            // 获取当前登录用户信息
+            LoginUser loginUser = LoginUserContext.get2();
+            if (null == loginUser) {
+                // 如果用户未登录,返回空
+                return respVO;
+            }
 
-        // 获取触发参数映射
-        Map<String, Object> triggerMap =
-                getRuleContextMap(loginUser.getId(), config.getUrl(), config.getTriggerRule());
-
-        // 创建积分规则对象
-        PointRule pointRule = createPointRule(config, triggerMap, null);
-
-        // 设置响应对象的基本信息
-        respVO.setTitle(pointRule.getRuleName());
-        respVO.setOperation(pointRule.getOperation());
-        respVO.setType(config.getType());
-        respVO.setPoint(pointRule.getPoint());
-
-        // 执行规则匹配和响应处理
-        DynamicRuleAction<PointRule> action = (t) -> {
-            pointRecordService.createPointRecord(
-                    loginUser.getId(),
-                    url,
-                    MathOperationEnum.ADD,
-                    t.getPoint(),
-                    PointBizTypeEnum.EVENT,
-                    String.valueOf(config.getId()));
-            respVO.match();
-        };
-
-        match(pointRule, action);
+            // 根据URL获取积分规则配置信息
+            PointRuleConfigDO config = ruleConfigService.getByUrl(url);
+            if (null == config) {
+                // 如果配置信息不存在,返回空
+                return respVO;
+            }
 
+            // 获取触发参数映射
+            Map<String, Object> triggerMap =
+                    getRuleContextMap(loginUser.getId(), config.getUrl(), config.getTriggerRule());
+
+            // 创建积分规则对象
+            PointRule pointRule = createPointRule(config, triggerMap, null);
+
+            // 设置响应对象的基本信息
+            respVO.setTitle(config.getTitle());
+            respVO.setOperation(pointRule.getOperation());
+            respVO.setType(config.getType());
+            respVO.setPoint(pointRule.getPoint());
+
+            // 执行规则匹配和响应处理
+
+            DynamicRuleAction<PointRule> action = (t) -> {
+                try {
+                    // 增加积分
+                    pointRecordService.createPointRecord(
+                            loginUser.getId(),
+                            url,
+                            config.getTitle(),
+                            MathOperationEnum.ADD.getOperator().equals(config.getOperation())
+                                    ? MathOperationEnum.ADD : MathOperationEnum.SUBTRACT,
+                            t.getPoint(),
+                            PointBizTypeEnum.EVENT,
+                            String.valueOf(config.getId()));
+                    // 增加点击数
+                    eventRecordService.createEventRecord(loginUser.getId(), url);
+                    respVO.match();
+                }catch (Exception ex) {
+                    state.set(false);
+                    throw ex;
+                }
+            };
+            match(pointRule, action);
+        }catch (Exception ex) {
+            state.set(false);
+        }finally {
+            if (state.get()) {
+                LocalTxUtil.commit(xid);
+            } else {
+                LocalTxUtil.rollback(xid);
+            }
+        }
         // 返回响应对象
         return respVO;
     }

+ 2 - 0
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/record/PointRecordService.java

@@ -28,6 +28,7 @@ public interface PointRecordService {
      *
      * @param userId  用户ID
      * @param url 事件地址
+     * @param title 规则标题
      * @param operation 操作
      * @param point   变动积分
      * @param bizType 业务类型
@@ -35,6 +36,7 @@ public interface PointRecordService {
      */
     void createPointRecord(Long userId,
                            String url,
+                           String title,
                            MathOperationEnum operation,
                            Integer point,
                            PointBizTypeEnum bizType,

+ 8 - 3
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/record/PointRecordServiceImpl.java

@@ -46,15 +46,16 @@ public class PointRecordServiceImpl implements PointRecordService {
     @DSTransactional
     public void createPointRecord(Long userId,
                                   String url,
+                                  String title,
                                   MathOperationEnum operation,
                                   Integer point,
                                   PointBizTypeEnum bizType,
                                   String bizId) {
-        if (point == 0) {
+        if (0 == point) {
             return;
         }
         // 1. 校验用户积分余额
-        UserPointDO user = userPointService.getPointByUserId(userId);
+        UserPointDO user = userPointService.createUserPointIfAbsent(userId);
         Integer userPoint = ObjectUtil.defaultIfNull(user.getPoint(), 0);
         int totalPoint = userPoint + point; // 用户变动后的积分
         if (totalPoint < 0) {
@@ -84,7 +85,11 @@ public class PointRecordServiceImpl implements PointRecordService {
                 .setPoint(point).setTotalPoint(totalPoint);
 
         if (PointBizTypeEnum.EVENT.equals(bizType)) {
-            record.setDescription(StrUtil.format(bizType.getDescription(), url, operation.getOperator(), point));
+            if (MathOperationEnum.SUBTRACT.equals(operation)) {
+                record.setDescription(StrUtil.format(bizType.getDescription(), title, point));
+            } else {
+                record.setDescription(StrUtil.format(bizType.getDescription(), title, operation.getOperator(), point));
+            }
         }
         mapper.insert(record);
     }

+ 1 - 0
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/signin/SignInRecordServiceImpl.java

@@ -75,6 +75,7 @@ public class SignInRecordServiceImpl implements SignInRecordService {
             pointRecordService.createPointRecord(
                     userId,
                     null,
+                    null,
                     MathOperationEnum.ADD,
                     record.getPoint(),
                     PointBizTypeEnum.SIGN,

+ 7 - 0
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/user/UserPointService.java

@@ -73,4 +73,11 @@ public interface UserPointService {
      */
     boolean updateUserPoint(Long userId, Integer point);
 
+    /**
+     * 如果用户积分不存在,则创建
+     * @param userId 用户编号
+     * @return 用户积分对象
+     */
+    UserPointDO createUserPointIfAbsent(Long userId);
+
 }

+ 11 - 0
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/user/UserPointServiceImpl.java

@@ -88,4 +88,15 @@ public class UserPointServiceImpl implements UserPointService {
         return true;
     }
 
+    @Override
+    @DSTransactional
+    public UserPointDO createUserPointIfAbsent(Long userId) {
+        UserPointDO userPointDO = userPointMapper.selectByUserId(userId);
+        if (null != userPointDO) {
+          return userPointDO;
+        }
+        UserPointDO userPoint = UserPointDO.builder().userId(userId).point(0).build();
+        userPointMapper.insert(userPoint);
+        return userPoint;
+    }
 }

+ 0 - 4
menduner/menduner-reward-biz/src/test/java/com/citu/module/menduner/reward/service/event/EventRecordServiceImplTest.java

@@ -105,7 +105,6 @@ public class EventRecordServiceImplTest extends BaseDbUnitTest {
         EventRecordDO dbEventRecord = randomPojo(EventRecordDO.class, o -> { // 等会查询到
             o.setUserId(null);
             o.setUrl(null);
-            o.setMetricId(null);
             o.setDate(null);
             o.setCreateTime(null);
         });
@@ -114,8 +113,6 @@ public class EventRecordServiceImplTest extends BaseDbUnitTest {
         eventRecordMapper.insert(cloneIgnoreId(dbEventRecord, o -> o.setUserId(null)));
         // 测试 url 不匹配
         eventRecordMapper.insert(cloneIgnoreId(dbEventRecord, o -> o.setUrl(null)));
-        // 测试 metricId 不匹配
-        eventRecordMapper.insert(cloneIgnoreId(dbEventRecord, o -> o.setMetricId(null)));
         // 测试 date 不匹配
         eventRecordMapper.insert(cloneIgnoreId(dbEventRecord, o -> o.setDate(null)));
         // 测试 createTime 不匹配
@@ -124,7 +121,6 @@ public class EventRecordServiceImplTest extends BaseDbUnitTest {
         EventRecordPageReqVO reqVO = new EventRecordPageReqVO();
         reqVO.setUserId(null);
         reqVO.setUrl(null);
-        reqVO.setMetricId(null);
         reqVO.setDate(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
         reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));