From ea44dd5c0e406a800034cc0a6a4b3a4dc3bf2c66 Mon Sep 17 00:00:00 2001 From: Timi Date: Wed, 9 Sep 2026 01:08:45 +0800 Subject: [PATCH] update point rule groovy script --- .../common/controller/NotifyController.java | 8 +++++ .../modules/common/entity/GroovyScript.java | 4 +++ .../mapper/GroovyScriptVersionMapper.java | 4 +++ .../common/service/GroovyScriptService.java | 29 ++++++------------- .../GroovyScriptServiceImplement.java | 24 +++++++++------ .../implement/NotifyServiceImplement.java | 10 +++---- .../controller/GaoPointRuleController.java | 16 ++++++++++ .../api/modules/gao/entity/GaoPointRule.java | 5 ++++ ...__remove_gao_point_rule_legacy_columns.sql | 9 ++++++ 9 files changed, 74 insertions(+), 35 deletions(-) create mode 100644 src/main/resources/db/migration/timiserver/V73__remove_gao_point_rule_legacy_columns.sql diff --git a/src/main/java/com/imyeyu/api/modules/common/controller/NotifyController.java b/src/main/java/com/imyeyu/api/modules/common/controller/NotifyController.java index 605e2f8..d3c7b07 100644 --- a/src/main/java/com/imyeyu/api/modules/common/controller/NotifyController.java +++ b/src/main/java/com/imyeyu/api/modules/common/controller/NotifyController.java @@ -58,6 +58,14 @@ public class NotifyController { @RequiredToken @PostMapping("/create") public Notify create(@RequestBody Notify notify) { + String sendFrom = userLoginService.isLogged() ? userLoginService.getRequireLoginUserId() : null; + notify.setCreatedBy(sendFrom); + for (NotifyDetail detail : notify.getDetailList()) { + detail.setNotifyId(notify.getId()); + if (TimiJava.isNotEmpty(sendFrom)) { + detail.setSendFrom(sendFrom); + } + } service.create(notify); return notify; } diff --git a/src/main/java/com/imyeyu/api/modules/common/entity/GroovyScript.java b/src/main/java/com/imyeyu/api/modules/common/entity/GroovyScript.java index a6c3d02..58a9619 100644 --- a/src/main/java/com/imyeyu/api/modules/common/entity/GroovyScript.java +++ b/src/main/java/com/imyeyu/api/modules/common/entity/GroovyScript.java @@ -1,5 +1,6 @@ package com.imyeyu.api.modules.common.entity; +import com.imyeyu.spring.annotation.table.Transient; import com.imyeyu.spring.entity.UUIDEntity; import lombok.Data; import lombok.EqualsAndHashCode; @@ -39,4 +40,7 @@ public class GroovyScript extends UUIDEntity { /// 当前发布版本 ID private String publishedVersionId; + + @Transient + private GroovyScriptVersion latest; } diff --git a/src/main/java/com/imyeyu/api/modules/common/mapper/GroovyScriptVersionMapper.java b/src/main/java/com/imyeyu/api/modules/common/mapper/GroovyScriptVersionMapper.java index f563e21..033fe58 100644 --- a/src/main/java/com/imyeyu/api/modules/common/mapper/GroovyScriptVersionMapper.java +++ b/src/main/java/com/imyeyu/api/modules/common/mapper/GroovyScriptVersionMapper.java @@ -2,10 +2,14 @@ package com.imyeyu.api.modules.common.mapper; import com.imyeyu.api.modules.common.entity.GroovyScriptVersion; import com.imyeyu.spring.mapper.BaseMapper; +import org.apache.ibatis.annotations.Select; /// Groovy 脚本版本 Mapper /// /// @author Codex /// @since 2026-09-04 public interface GroovyScriptVersionMapper extends BaseMapper { + + @Select("SELECT * FROM `groovy_script_version` WHERE `script_id` = #{scriptId} " + NOT_DELETE + " ORDER BY `version` DESC " + LIMIT_1) + GroovyScriptVersion selectLatest(String scriptId); } diff --git a/src/main/java/com/imyeyu/api/modules/common/service/GroovyScriptService.java b/src/main/java/com/imyeyu/api/modules/common/service/GroovyScriptService.java index eee5ef4..7d59465 100644 --- a/src/main/java/com/imyeyu/api/modules/common/service/GroovyScriptService.java +++ b/src/main/java/com/imyeyu/api/modules/common/service/GroovyScriptService.java @@ -1,8 +1,8 @@ package com.imyeyu.api.modules.common.service; +import com.imyeyu.api.modules.common.bean.GroovyScriptExecutionResult; import com.imyeyu.api.modules.common.entity.GroovyScript; import com.imyeyu.api.modules.common.entity.GroovyScriptVersion; -import com.imyeyu.api.modules.common.bean.GroovyScriptExecutionResult; import com.imyeyu.spring.service.BaseService; import java.util.List; @@ -16,6 +16,12 @@ import java.util.Map; /// @since 2026-09-04 public interface GroovyScriptService extends BaseService { + /// 按业务归属查询脚本列表 + /// + /// @param bizType 业务归属 + /// @return 脚本列表 + List listByBizType(GroovyScript.BizType bizType); + /// 按业务归属和代码查询脚本 /// /// @param bizType 业务归属 @@ -23,26 +29,14 @@ public interface GroovyScriptService extends BaseService { /// @return 脚本,不存在时返回 null GroovyScript getByCode(GroovyScript.BizType bizType, String code); - /// 创建脚本元数据 - /// - /// 新建脚本默认停用,且没有已发布版本 - /// - /// @param script 脚本元数据 - void create(GroovyScript script); - - /// 更新脚本元数据 - /// - /// 业务归属和代码是脚本稳定标识,创建后不可变更 - /// - /// @param script 脚本元数据 - void update(GroovyScript script); - /// 设置脚本启用状态 /// /// @param id 脚本 ID /// @param enabled true 为允许执行已发布版本 void setEnabled(String id, boolean enabled); + GroovyScriptVersion getLatestVersion(String scriptId); + /// 创建不可变的脚本版本 /// /// @param scriptId 脚本 ID @@ -67,11 +61,6 @@ public interface GroovyScriptService extends BaseService { /// @param scriptId 脚本 ID void unpublish(String scriptId); - /// 删除脚本 - /// - /// @param id 脚本 ID - void delete(String id); - /// 执行已发布且启用的脚本 /// /// @param bizType 业务归属 diff --git a/src/main/java/com/imyeyu/api/modules/common/service/implement/GroovyScriptServiceImplement.java b/src/main/java/com/imyeyu/api/modules/common/service/implement/GroovyScriptServiceImplement.java index 890571c..f90ee3f 100644 --- a/src/main/java/com/imyeyu/api/modules/common/service/implement/GroovyScriptServiceImplement.java +++ b/src/main/java/com/imyeyu/api/modules/common/service/implement/GroovyScriptServiceImplement.java @@ -1,9 +1,9 @@ package com.imyeyu.api.modules.common.service.implement; import com.imyeyu.api.config.dbsource.TimiServerDBConfig; +import com.imyeyu.api.modules.common.bean.GroovyScriptExecutionResult; import com.imyeyu.api.modules.common.entity.GroovyScript; import com.imyeyu.api.modules.common.entity.GroovyScriptVersion; -import com.imyeyu.api.modules.common.bean.GroovyScriptExecutionResult; import com.imyeyu.api.modules.common.mapper.GroovyScriptMapper; import com.imyeyu.api.modules.common.mapper.GroovyScriptVersionMapper; import com.imyeyu.api.modules.common.service.GroovyScriptService; @@ -52,6 +52,14 @@ public class GroovyScriptServiceImplement extends AbstractEntityService listByBizType(GroovyScript.BizType bizType) { + TimiException.required(bizType, "未找到脚本业务归属"); + GroovyScript example = new GroovyScript(); + example.setBizType(bizType); + return mapper.selectAllByExample(example); + } + @Override public GroovyScript getByCode(GroovyScript.BizType bizType, String code) { GroovyScript example = new GroovyScript(); @@ -95,6 +103,11 @@ public class GroovyScriptServiceImplement extends AbstractEntityService scriptList() { + return groovyScriptService.listByBizType(GroovyScript.BizType.GAO_POINT_RULE); + } + @AOPLog @RequestRateLimit @RequireGaoPermission(GaoPermissionCode.POINT_RULE_CREATE) diff --git a/src/main/java/com/imyeyu/api/modules/gao/entity/GaoPointRule.java b/src/main/java/com/imyeyu/api/modules/gao/entity/GaoPointRule.java index eba636a..a60ec2c 100644 --- a/src/main/java/com/imyeyu/api/modules/gao/entity/GaoPointRule.java +++ b/src/main/java/com/imyeyu/api/modules/gao/entity/GaoPointRule.java @@ -1,5 +1,7 @@ package com.imyeyu.api.modules.gao.entity; +import com.imyeyu.api.modules.common.entity.GroovyScript; +import com.imyeyu.spring.annotation.table.Transient; import com.imyeyu.spring.entity.UUIDEntity; import lombok.Data; import lombok.EqualsAndHashCode; @@ -96,4 +98,7 @@ public class GaoPointRule extends UUIDEntity { /// 备注 private String remark; + + @Transient + private GroovyScript groovyScript; } diff --git a/src/main/resources/db/migration/timiserver/V73__remove_gao_point_rule_legacy_columns.sql b/src/main/resources/db/migration/timiserver/V73__remove_gao_point_rule_legacy_columns.sql new file mode 100644 index 0000000..93bd127 --- /dev/null +++ b/src/main/resources/db/migration/timiserver/V73__remove_gao_point_rule_legacy_columns.sql @@ -0,0 +1,9 @@ +-- 积分规则已迁移到 trigger_source_type、trigger_ref_type、trigger_ref_id 模型。 +-- 删除旧模型字段,避免实体未赋值时触发非空约束。 +ALTER TABLE `gao_point_rule` + DROP KEY `idx_gao_point_rule_match`, + DROP KEY `idx_gao_point_rule_type`, + DROP COLUMN `event_id`, + DROP COLUMN `trigger_type`, + DROP COLUMN `point_mode`, + DROP COLUMN `condition_json`;