Przeglądaj źródła

1、优化积分规则配置
2、增加兼容任务积分奖励需求

rayson 9 miesięcy temu
rodzic
commit
c1ff6803e7
21 zmienionych plików z 261 dodań i 7 usunięć
  1. 5 0
      menduner/menduner-reward-api/src/main/java/com/citu/module/menduner/reward/enums/ErrorCodeConstants.java
  2. 29 0
      menduner/menduner-reward-api/src/main/java/com/citu/module/menduner/reward/enums/config/PointRuleConfigTriggerTypeEnum.java
  3. 33 0
      menduner/menduner-reward-api/src/main/java/com/citu/module/menduner/reward/enums/config/PointRuleConfigTypeEnum.java
  4. 10 0
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/admin/event/EventTrackController.java
  5. 6 0
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/config/PointRuleConfigPageReqVO.java
  6. 8 0
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/config/PointRuleConfigRespVO.java
  7. 7 0
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/config/PointRuleConfigSaveReqVO.java
  8. 29 0
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/config/TaskRespVO.java
  9. 3 0
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/event/EventTrackUrlRespVO.java
  10. 10 1
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/dal/dataobject/config/PointRuleConfigDO.java
  11. 40 1
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/dal/mysql/config/PointRuleConfigMapper.java
  12. 25 0
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/dal/mysql/event/EventRecordMapper.java
  13. 6 0
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/config/PointRuleConfigService.java
  14. 23 2
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/config/PointRuleConfigServiceImpl.java
  15. 8 0
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/event/EventTrackService.java
  16. 12 1
      menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/service/event/EventTrackServiceImpl.java
  17. 1 1
      menduner/menduner-reward-biz/src/main/resources/application.yaml
  18. 2 0
      menduner/menduner-reward-biz/src/main/resources/i18n/messages_en_US.properties
  19. 2 0
      menduner/menduner-reward-biz/src/main/resources/i18n/messages_zh_CN.properties
  20. 1 0
      menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/account/PointBizTypeEnum.java
  21. 1 1
      menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/record/UserAccountRecordServiceImpl.java

+ 5 - 0
menduner/menduner-reward-api/src/main/java/com/citu/module/menduner/reward/enums/ErrorCodeConstants.java

@@ -32,6 +32,11 @@ public interface ErrorCodeConstants {
     ErrorCode POINT_RULE_CONFIG_TRIGGER_RULE_CAN_NOT_BE_EMPTY = new ErrorCode(1_110_001_007, "触发规则不能为空");
     ErrorCode POINT_RULE_CONFIG_URL_EXISTS = new ErrorCode(1_110_001_008, "事件地址已存在配置");
 
+    ErrorCode POINT_RULE_CONFIG_TRIGGER_RULE_TYPE_NOT_SUPPORT = new ErrorCode(1_110_001_009, "未选择规则触发类型");
+
+    ErrorCode POINT_RULE_CONFIG_MARK_VALUE_CAN_NOT_BE_EMPTY = new ErrorCode(1_110_001_010, "选择标记事件类型,标记值不能为空");
+
+
     //========== 积分记录 1_110_002_000 ==========
     ErrorCode POINT_RECORD_BIZ_NOT_SUPPORT = new ErrorCode(1_110_002_001, "用户积分记录业务类型不支持");
 

+ 29 - 0
menduner/menduner-reward-api/src/main/java/com/citu/module/menduner/reward/enums/config/PointRuleConfigTriggerTypeEnum.java

@@ -0,0 +1,29 @@
+package com.citu.module.menduner.reward.enums.config;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 事件触发类型
+ * 事件触发类型定义如下:
+ * 请求成功后触发 (0)
+ *   描述:当事件地址的请求返回成功状态码(如 HTTP 200)后触发。
+ *   适用场景:需要确认服务器响应成功的操作,例如表单提交、API 调用等。
+ * 点击立即触发 (1)
+ *   描述:用户点击事件地址后立即触发,无论请求是否成功。
+ *   适用场景:需要记录用户点击行为或立即响应的操作,例如按钮点击、链接跳转等。
+ * 页面停留触发 (2)
+ *   描述:用户点击事件地址后,如果在该页面停留时间达到指定秒数(N秒)后触发。
+ *   适用场景:需要确认用户实际浏览了页面内容的操作,例如文章阅读、产品详情页查看等。
+ */
+@Getter
+@AllArgsConstructor
+public enum PointRuleConfigTriggerTypeEnum {
+    REQUEST_SUCCESS("0", "请求成功后触发"),
+    CLICK("1", "点击触发"),
+    PAGE_STAY("2", "页面停留");
+
+    private final String type;
+    private final String name;
+
+}

+ 33 - 0
menduner/menduner-reward-api/src/main/java/com/citu/module/menduner/reward/enums/config/PointRuleConfigTypeEnum.java

@@ -0,0 +1,33 @@
+package com.citu.module.menduner.reward.enums.config;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 事件类型
+ * 事件类型定义
+ * 普通事件 (0)
+ *  名称:普通事件
+ *  描述:这类事件是随时可以根据规则触发的事件。例如,用户登录、点击某个按钮等。
+ *  用途:适用于任何实时或即时触发的操作。
+ * 标记事件 (1)
+ *  名称:标记事件
+ *  描述:这类事件包含"普通事件"的特性之外, 还用于标记某些特定的状态或行为,以便用户可以在页面上查看该事件是否已经完成。
+ *  用途:适用于需要用户跟踪进度或状态的情况,例如任务完成情况、成就达成等。
+ * 异步确认事件 (2)
+ *  名称:异步确认事件
+ *  描述:这类事件用于处理那些不是立即有结果的操作,需要通过定时扫描或其他方式来确认最终结果。例如,支付操作的结果可能需要一段时间才能确认成功。
+ *  用途:适用于需要等待外部系统反馈或需要经过一定时间才能确认结果的操作,如支付、订单状态更新等。
+ **/
+@Getter
+@AllArgsConstructor
+public enum PointRuleConfigTypeEnum {
+
+    COMMON("0", "普通事件"),
+    MARK("1", "标记事件"),
+    ASYNC_CONFIRM("2", "异步确认事件");
+
+    private final String type;
+    private final String name;
+
+}

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

@@ -3,6 +3,7 @@ package com.citu.module.menduner.reward.controller.admin.event;
 import com.citu.framework.common.pojo.CommonResult;
 import com.citu.framework.security.core.annotations.PreAuthenticated;
 import com.citu.module.menduner.reward.controller.base.common.TreeRespVO;
+import com.citu.module.menduner.reward.controller.base.config.TaskRespVO;
 import com.citu.module.menduner.reward.controller.base.event.EventTrackPointRespVO;
 import com.citu.module.menduner.reward.controller.base.event.EventTrackUrlRespVO;
 import com.citu.module.menduner.reward.service.event.EventTrackService;
@@ -44,6 +45,15 @@ public class EventTrackController {
         return success(service.click(url));
     }
 
+    @PermitAll
+    @PreAuthenticated
+    @PostMapping("/get/mark/task")
+    @Operation(summary = "获取标记事件任务")
+    public CommonResult<List<TaskRespVO>> getMarkTask(@RequestParam("mark") String mark) {
+        return success(service.getMarkTask(mark));
+    }
+
+
     @PermitAll
     @PreAuthenticated
     @GetMapping("/get/url/list")

+ 6 - 0
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/config/PointRuleConfigPageReqVO.java

@@ -23,6 +23,12 @@ public class PointRuleConfigPageReqVO extends PageParam {
     @Schema(description = "类型", example = "2")
     private String type;
 
+    @Schema(description = "触发类型", example = "2")
+    private String triggerType;
+
+    @Schema(description = "标记")
+    private String mark;
+
     @Schema(description = "规则标题")
     private String title;
 

+ 8 - 0
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/config/PointRuleConfigRespVO.java

@@ -25,6 +25,14 @@ public class PointRuleConfigRespVO {
     @ExcelProperty("类型")
     private String type;
 
+    @Schema(description = "触发类型", example = "2")
+    @ExcelProperty("触发类型")
+    private String triggerType;
+
+    @Schema(description = "标记")
+    @ExcelProperty("标记")
+    private String mark;
+
     @Schema(description = "规则标题", requiredMode = Schema.RequiredMode.REQUIRED)
     @ExcelProperty("规则标题")
     private String title;

+ 7 - 0
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/config/PointRuleConfigSaveReqVO.java

@@ -23,6 +23,13 @@ public class PointRuleConfigSaveReqVO {
     @NotEmpty(message = "{1_110_001_003}")
     private String type;
 
+    @Schema(description = "触发类型", example = "2")
+    @NotEmpty(message = "{1_110_001_009}")
+    private String triggerType;
+
+    @Schema(description = "标记")
+    private String mark;
+
     @Schema(description = "规则标题", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotEmpty(message = "{1_110_001_004}")
     private String title;

+ 29 - 0
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/config/TaskRespVO.java

@@ -0,0 +1,29 @@
+package com.citu.module.menduner.reward.controller.base.config;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "推荐任务 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class TaskRespVO {
+
+    @Schema(description = "规则标题", requiredMode = Schema.RequiredMode.REQUIRED)
+    private String title;
+
+    @Schema(description = "url", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn")
+    private String url;
+
+    @Schema(description = "数学运算符", requiredMode = Schema.RequiredMode.REQUIRED)
+    private String operation;
+
+    @Schema(description = "积分数", requiredMode = Schema.RequiredMode.REQUIRED)
+    private Integer point;
+
+    @Schema(description = "排序")
+    private Integer sort;
+
+    @Schema(description = "是否完成")
+    private boolean complete;
+}

+ 3 - 0
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/controller/base/event/EventTrackUrlRespVO.java

@@ -16,6 +16,9 @@ public class EventTrackUrlRespVO {
     @Schema(description = "类型")
     private String type;
 
+    @Schema(description = "触发类型", example = "2")
+    private String triggerType;
+
     @Schema(description = "规则标题")
     private String title;
 

+ 10 - 1
menduner/menduner-reward-biz/src/main/java/com/citu/module/menduner/reward/dal/dataobject/config/PointRuleConfigDO.java

@@ -33,9 +33,18 @@ public class PointRuleConfigDO extends BaseDO {
      */
     private String url;
     /**
-     * 类型
+     * 事件类型
+     * @link {@link com.citu.module.menduner.reward.enums.config.PointRuleConfigTypeEnum}
      */
     private String type;
+    /**
+     * 触发类型
+     */
+    private String triggerType;
+    /**
+     * 标记
+     */
+    private String mark;
     /**
      * 规则标题
      */

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

@@ -3,8 +3,11 @@ package com.citu.module.menduner.reward.dal.mysql.config;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.mybatis.core.mapper.BaseMapperX;
 import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.citu.framework.mybatis.core.query.MPJLambdaWrapperX;
 import com.citu.module.menduner.reward.controller.base.config.PointRuleConfigPageReqVO;
+import com.citu.module.menduner.reward.controller.base.config.TaskRespVO;
 import com.citu.module.menduner.reward.dal.dataobject.config.PointRuleConfigDO;
+import com.citu.module.menduner.reward.dal.dataobject.event.EventRecordDO;
 import com.citu.module.menduner.reward.enums.config.PointRuleConfigStatusEnum;
 import org.apache.ibatis.annotations.Mapper;
 
@@ -22,6 +25,8 @@ public interface PointRuleConfigMapper extends BaseMapperX<PointRuleConfigDO> {
         return selectPage(reqVO, new LambdaQueryWrapperX<PointRuleConfigDO>()
                 .likeIfPresent(PointRuleConfigDO::getUrl, reqVO.getUrl())
                 .eqIfPresent(PointRuleConfigDO::getType, reqVO.getType())
+                .eqIfPresent(PointRuleConfigDO::getTriggerType, reqVO.getTriggerType())
+                .likeIfPresent(PointRuleConfigDO::getMark, reqVO.getMark())
                 .likeIfPresent(PointRuleConfigDO::getTitle, reqVO.getTitle())
                 .eqIfPresent(PointRuleConfigDO::getOperation, reqVO.getOperation())
                 .eqIfPresent(PointRuleConfigDO::getStatus, reqVO.getStatus())
@@ -43,7 +48,7 @@ public interface PointRuleConfigMapper extends BaseMapperX<PointRuleConfigDO> {
         );
     }
 
-    default PointRuleConfigDO existByUrl(String url,Long id) {
+    default PointRuleConfigDO existByUrl(String url, Long id) {
         return selectOne(new LambdaQueryWrapperX<PointRuleConfigDO>()
                 .eq(PointRuleConfigDO::getUrl, url)
                 .neIfPresent(PointRuleConfigDO::getId, id)
@@ -58,5 +63,39 @@ public interface PointRuleConfigMapper extends BaseMapperX<PointRuleConfigDO> {
         );
     }
 
+    /**
+     * 查询任务
+     *
+     * @param userId 用户id
+     * @param type 事件类型
+     * @param mark 标记
+     */
+    default List<TaskRespVO> selectTask(Long userId, String type,String mark) {
+        MPJLambdaWrapperX<PointRuleConfigDO> query = new MPJLambdaWrapperX<>();
+        query.selectAs(PointRuleConfigDO::getTitle, TaskRespVO::getTitle);
+        query.selectAs(PointRuleConfigDO::getUrl, TaskRespVO::getUrl);
+        query.selectAs(PointRuleConfigDO::getPoint, TaskRespVO::getPoint);
+        query.selectAs(PointRuleConfigDO::getSort, TaskRespVO::getSort);
+        query.selectAs(PointRuleConfigDO::getOperation, TaskRespVO::getOperation);
+        // 总数
+//        query.selectFunc(" COALESCE(SUM(%s), 0)", arg -> arg.accept(EventRecordDO::getCount),"totalCount");
+        query.selectFunc("CASE WHEN COALESCE(SUM(%s), 0) > 0 THEN TRUE ELSE FALSE END",
+                arg -> arg.accept(EventRecordDO::getCount), TaskRespVO::isComplete);
+
+        query.leftJoin(EventRecordDO.class, on -> on
+                .eq(EventRecordDO::getUrl, PointRuleConfigDO::getUrl)
+                .eq(EventRecordDO::getUserId, userId)
+        );
+
+        // 增加条件
+        query.eq(PointRuleConfigDO::getStatus, PointRuleConfigStatusEnum.ENABLE.getStatus());
+        query.eq(PointRuleConfigDO::getType, type);
+        query.eqIfPresent(PointRuleConfigDO::getMark, mark);
+
+        query.orderByAsc(PointRuleConfigDO::getSort);
+        query.groupBy(PointRuleConfigDO::getId);
+
+        return selectJoinList(TaskRespVO.class, query);
+    }
 
 }

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

@@ -6,6 +6,8 @@ import com.citu.framework.mybatis.core.mapper.BaseMapperX;
 import com.citu.framework.mybatis.core.query.LambdaQueryWrapperX;
 import com.citu.module.menduner.reward.controller.base.event.EventRecordPageReqVO;
 import com.citu.module.menduner.reward.dal.dataobject.event.EventRecordDO;
+import com.citu.module.menduner.system.enums.account.AccountRecordTypeEnum;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.time.LocalDateTime;
@@ -44,6 +46,29 @@ public interface EventRecordMapper extends BaseMapperX<EventRecordDO> {
         return selectList(wrapperX);
     }
 
+    /**
+     * 查询事件在某段时间的点击总数量
+     * @param userId 用户ID
+     * @param url 地址
+     * @param startDate 开始时间
+     * @param endDate 结束时间
+     */
+    default int sumCount(Long userId, String url, LocalDateTime startDate, LocalDateTime endDate) {
+        MPJLambdaWrapper<EventRecordDO> wrapperX = new MPJLambdaWrapper<EventRecordDO>();
+        wrapperX.selectSum(EventRecordDO::getCount);
+        wrapperX.eq(EventRecordDO::getUserId, userId);
+        wrapperX.eqIfExists(EventRecordDO::getUrl, url);
+        if (null != startDate) {
+            wrapperX.ge(EventRecordDO::getCreateTime, startDate);
+        }
+
+        if (null != endDate) {
+            wrapperX.le(EventRecordDO::getCreateTime, endDate);
+        }
+
+        return selectJoinOne(Integer.class, wrapperX);
+    }
+
     // 根据用户ID、地址、指标ID、当天时间查询事件记录
     default EventRecordDO get(Long userId, String url, LocalDateTime date) {
         LambdaQueryWrapperX<EventRecordDO> wrapperX = new LambdaQueryWrapperX<EventRecordDO>();

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

@@ -3,6 +3,7 @@ package com.citu.module.menduner.reward.service.config;
 import com.citu.framework.common.pojo.PageResult;
 import com.citu.module.menduner.reward.controller.base.config.PointRuleConfigPageReqVO;
 import com.citu.module.menduner.reward.controller.base.config.PointRuleConfigSaveReqVO;
+import com.citu.module.menduner.reward.controller.base.config.TaskRespVO;
 import com.citu.module.menduner.reward.dal.dataobject.config.PointRuleConfigDO;
 
 import javax.validation.Valid;
@@ -76,4 +77,9 @@ public interface PointRuleConfigService {
      * 关闭规则
      **/
     boolean disable(List<Long> ids);
+
+    /**
+     * 获取任务
+     **/
+    List<TaskRespVO> selectTask(Long userId, String type, String mark);
 }

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

@@ -5,21 +5,25 @@ import com.citu.framework.common.pojo.PageResult;
 import com.citu.framework.common.util.object.BeanUtils;
 import com.citu.module.menduner.reward.controller.base.config.PointRuleConfigPageReqVO;
 import com.citu.module.menduner.reward.controller.base.config.PointRuleConfigSaveReqVO;
+import com.citu.module.menduner.reward.controller.base.config.TaskRespVO;
 import com.citu.module.menduner.reward.dal.dataobject.config.PointRuleConfigDO;
 import com.citu.module.menduner.reward.dal.mysql.config.PointRuleConfigMapper;
 import com.citu.module.menduner.reward.dal.redis.RedisKeyConstants;
 import com.citu.module.menduner.reward.enums.config.PointRuleConfigStatusEnum;
+import com.citu.module.menduner.reward.enums.config.PointRuleConfigTypeEnum;
 import com.citu.module.menduner.system.enums.MendunerStatusEnum;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.cache.annotation.Caching;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 import java.util.List;
 
 import static com.citu.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.citu.module.menduner.reward.enums.ErrorCodeConstants.POINT_RULE_CONFIG_MARK_VALUE_CAN_NOT_BE_EMPTY;
 import static com.citu.module.menduner.reward.enums.ErrorCodeConstants.POINT_RULE_CONFIG_NOT_EXISTS;
 
 /**
@@ -48,6 +52,11 @@ public class PointRuleConfigServiceImpl implements PointRuleConfigService {
         //        if (null != exist) {
         //            throw exception(POINT_RULE_CONFIG_URL_EXISTS);
         //        }
+        if(PointRuleConfigTypeEnum.MARK.getType().equals(createReqVO.getType())){
+            if(!StringUtils.hasText(createReqVO.getMark())){
+                throw exception(POINT_RULE_CONFIG_MARK_VALUE_CAN_NOT_BE_EMPTY);
+            }
+        }
         mapper.insert(pointRuleConfig);
         // 返回
         return pointRuleConfig.getId();
@@ -67,6 +76,11 @@ public class PointRuleConfigServiceImpl implements PointRuleConfigService {
         //        if (null != exist) {
         //            throw exception(POINT_RULE_CONFIG_URL_EXISTS);
         //        }
+        if(PointRuleConfigTypeEnum.MARK.getType().equals(updateReqVO.getType())){
+            if(!StringUtils.hasText(updateReqVO.getMark())){
+                throw exception(POINT_RULE_CONFIG_MARK_VALUE_CAN_NOT_BE_EMPTY);
+            }
+        }
         // 更新
         PointRuleConfigDO updateObj = BeanUtils.toBean(updateReqVO, PointRuleConfigDO.class);
         mapper.updateById(updateObj);
@@ -85,10 +99,12 @@ public class PointRuleConfigServiceImpl implements PointRuleConfigService {
         mapper.deleteById(id);
     }
 
-    private void validatePointRuleConfigExists(Long id) {
-        if (mapper.selectById(id) == null) {
+    private PointRuleConfigDO validatePointRuleConfigExists(Long id) {
+        PointRuleConfigDO pointRuleConfig = mapper.selectById(id);
+        if(null == pointRuleConfig) {
             throw exception(POINT_RULE_CONFIG_NOT_EXISTS);
         }
+        return pointRuleConfig;
     }
 
     @Override
@@ -160,4 +176,9 @@ public class PointRuleConfigServiceImpl implements PointRuleConfigService {
         }
         return true;
     }
+
+    @Override
+    public List<TaskRespVO> selectTask(Long userId, String type, String mark) {
+        return mapper.selectTask(userId, type, mark);
+    }
 }

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

@@ -1,6 +1,7 @@
 package com.citu.module.menduner.reward.service.event;
 
 import com.citu.module.menduner.reward.controller.base.common.TreeRespVO;
+import com.citu.module.menduner.reward.controller.base.config.TaskRespVO;
 import com.citu.module.menduner.reward.controller.base.event.EventTrackPointRespVO;
 import com.citu.module.menduner.reward.controller.base.event.EventTrackUrlRespVO;
 import com.citu.module.menduner.system.api.url.UrlInfoRespVO;
@@ -27,4 +28,11 @@ public interface EventTrackService {
      * 获取menduner相关服务的url地址
      **/
     List<TreeRespVO<List<TreeRespVO<List<UrlInfoRespVO>>>>> getUrlList();
+
+
+    /**
+     * 根据标记值获取标记事件的任务
+     * @param mark 标记值
+     **/
+    List<TaskRespVO> getMarkTask(String mark);
 }

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

@@ -5,6 +5,7 @@ import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 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;
+import com.citu.module.menduner.reward.controller.base.config.TaskRespVO;
 import com.citu.module.menduner.reward.controller.base.event.EventTrackPointRespVO;
 import com.citu.module.menduner.reward.controller.base.event.EventTrackUrlRespVO;
 import com.citu.module.menduner.reward.convert.PointRuleConfigConvert;
@@ -13,6 +14,7 @@ import com.citu.module.menduner.reward.core.PointRule;
 import com.citu.module.menduner.reward.core.RuleMatch;
 import com.citu.module.menduner.reward.dal.dataobject.config.Condition;
 import com.citu.module.menduner.reward.dal.dataobject.config.PointRuleConfigDO;
+import com.citu.module.menduner.reward.enums.config.PointRuleConfigTypeEnum;
 import com.citu.module.menduner.reward.mq.message.UserPointSendMessage;
 import com.citu.module.menduner.reward.mq.producer.UserPointProducer;
 import com.citu.module.menduner.reward.rule.DynamicPointRule;
@@ -100,6 +102,11 @@ public class EventTrackServiceImpl implements EventTrackService {
         return convertUrlInfoListToTree(list);
     }
 
+    @Override
+    public List<TaskRespVO> getMarkTask(String mark) {
+        return ruleConfigService.selectTask(LoginUserContext.getUserId(), PointRuleConfigTypeEnum.MARK.getType(), mark);
+    }
+
     @Override
     @DSTransactional
     public List<EventTrackPointRespVO> click(String url) {
@@ -192,6 +199,10 @@ public class EventTrackServiceImpl implements EventTrackService {
      **/
     private UserPointSendMessage buildUserPointSendMessage(LoginUser loginUser, PointRuleConfigDO config,
                                                            PointRule pointRule, String url) {
+        PointBizTypeEnum bizType = PointBizTypeEnum.EVENT;
+        if (PointRuleConfigTypeEnum.MARK.getType().equals(config.getType())) {
+            bizType = PointBizTypeEnum.RECOMMEND_TASK;
+        }
         return UserPointSendMessage.builder()
                 .userId(loginUser.getId())
                 .url(url)
@@ -199,7 +210,7 @@ public class EventTrackServiceImpl implements EventTrackService {
                 .operation(MathOperationEnum.ADD.getOperator().equals(config.getOperation())
                         ? MathOperationEnum.ADD : MathOperationEnum.SUBTRACT) // 确定操作类型(加法或减法)
                 .point(pointRule.getPoint())
-                .bizType(PointBizTypeEnum.EVENT)
+                .bizType(bizType)
                 .bizId(String.valueOf(config.getId()))
                 .build();
     }

+ 1 - 1
menduner/menduner-reward-biz/src/main/resources/application.yaml

@@ -72,7 +72,7 @@ mybatis-plus:
       #      id-type: ASSIGN_ID # 分配 ID,默认使用雪花算法。注意,Oracle、PostgreSQL、Kingbase、DB2、H2 数据库时,需要去除实体类上的 @KeySequence 注解
       logic-delete-value: 1 # 逻辑已删除值(默认为 1)
       logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
-    banner: true # 关闭控制台的 Banner 打印
+    banner: false # 关闭控制台的 Banner 打印
   type-aliases-package: ${citu.info.base-package}.dal.dataobject
   encryptor:
     password: XDV71a+xqStEA3WH # 加解密的秘钥,可使用 https://www.imaegoo.com/2020/aes-key-generator/ 网站生成

+ 2 - 0
menduner/menduner-reward-biz/src/main/resources/i18n/messages_en_US.properties

@@ -29,6 +29,8 @@
 1_110_001_006=The number of points cannot be empty
 1_110_001_007=Trigger rule cannot be empty
 1_110_001_008=Event address already exists in configuration
+1_110_001_009=No rule trigger type selected
+1_110_001_010=Select the marked event type, the marked value cannot be empty
 # ========== 积分记录 1_110_002_000 ==========
 1_110_002_001=User point record business type not supported
 # ========== 签到配置 1_110_003_000 ==========

+ 2 - 0
menduner/menduner-reward-biz/src/main/resources/i18n/messages_zh_CN.properties

@@ -29,6 +29,8 @@
 1_110_001_006=积分数量不能为空
 1_110_001_007=触发规则不能为空
 1_110_001_008=事件地址已存在配置
+1_110_001_009=未选择规则触发类型
+1_110_001_010=选择标记事件类型,标记值不能为空
 #========== 积分记录 1_110_002_000 ==========
 1_110_002_001=用户积分记录业务类型不支持
 # ========== 签到配置 1_110_003_000 ==========

+ 1 - 0
menduner/menduner-system-api/src/main/java/com/citu/module/menduner/system/enums/account/PointBizTypeEnum.java

@@ -26,6 +26,7 @@ public enum PointBizTypeEnum {
     NOT_RECOMMENDED(8,"无推荐人,推荐人佣金给到平台","推荐职位,获得 {}",true),
     SIGN(98, "签到", "签到获得 {} 积分", true),
     EVENT(99, "事件跟踪", "访问[{}],{}{} 积分", true),
+    RECOMMEND_TASK(100, "完成任务", "[{}],{}{} 积分", true),
     ;
 
     /**

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/record/UserAccountRecordServiceImpl.java

@@ -94,7 +94,7 @@ public class UserAccountRecordServiceImpl implements UserAccountRecordService {
                 .setDescription(StrUtil.format(bizType.getDescription(), point))
                 .setPoint(point).setTotalPoint(totalPoint);
 
-        if (PointBizTypeEnum.EVENT.equals(bizType)) {
+        if (PointBizTypeEnum.EVENT.equals(bizType) || PointBizTypeEnum.RECOMMEND_TASK.equals(bizType)) {
             if (MathOperationEnum.SUBTRACT.equals(operation)) {
                 record.setDescription(StrUtil.format(bizType.getDescription(), title, point));
             } else {