From 1a896ef457dc452693db24e2d45948d7e67783ae Mon Sep 17 00:00:00 2001 From: Timi Date: Wed, 19 Aug 2026 16:12:23 +0800 Subject: [PATCH] add point rule sort --- .../controller/GaoPointRuleController.java | 15 +++++++++ .../gao/mapper/GaoPointRuleMapper.java | 3 ++ .../gao/service/GaoPointRuleService.java | 11 +++++++ .../GaoPointRuleServiceImplement.java | 32 +++++++++++++++++++ .../timi-server/gao/GaoPointRuleMapper.xml | 10 ++++++ 5 files changed, 71 insertions(+) diff --git a/src/main/java/com/imyeyu/api/modules/gao/controller/GaoPointRuleController.java b/src/main/java/com/imyeyu/api/modules/gao/controller/GaoPointRuleController.java index 02c6e9d..e786ca1 100644 --- a/src/main/java/com/imyeyu/api/modules/gao/controller/GaoPointRuleController.java +++ b/src/main/java/com/imyeyu/api/modules/gao/controller/GaoPointRuleController.java @@ -21,6 +21,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /// GAO 客户积分规则接口 /// /// @author Codex @@ -78,6 +80,19 @@ public class GaoPointRuleController { ruleService.update(rule); } + @AOPLog + @RequestRateLimit + @RequireGaoPermission(GaoPermissionCode.POINT_RULE_UPDATE) + @PostMapping("/rule/sort") + public void sort(@RequestBody List idList) { + if (idList != null) { + for (GaoPointRule rule : ruleService.listByIdList(idList)) { + checkStore(rule.getStoreId()); + } + } + ruleService.sort(idList); + } + @AOPLog @RequestRateLimit @RequireGaoPermission(GaoPermissionCode.POINT_RULE_DELETE) diff --git a/src/main/java/com/imyeyu/api/modules/gao/mapper/GaoPointRuleMapper.java b/src/main/java/com/imyeyu/api/modules/gao/mapper/GaoPointRuleMapper.java index 15a5807..97a1fe1 100644 --- a/src/main/java/com/imyeyu/api/modules/gao/mapper/GaoPointRuleMapper.java +++ b/src/main/java/com/imyeyu/api/modules/gao/mapper/GaoPointRuleMapper.java @@ -4,6 +4,7 @@ import com.imyeyu.api.modules.gao.entity.GaoPointRule; import com.imyeyu.spring.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; +import java.util.Collection; import java.util.List; /// GAO 客户积分规则 Mapper @@ -12,6 +13,8 @@ import java.util.List; /// @since 2026-08-11 public interface GaoPointRuleMapper extends BaseMapper { + List selectByIdList(Collection idList); + /// 查询当前时间可匹配的启用规则 /// /// @param storeId 门店 ID diff --git a/src/main/java/com/imyeyu/api/modules/gao/service/GaoPointRuleService.java b/src/main/java/com/imyeyu/api/modules/gao/service/GaoPointRuleService.java index 5dbc7ff..7101126 100644 --- a/src/main/java/com/imyeyu/api/modules/gao/service/GaoPointRuleService.java +++ b/src/main/java/com/imyeyu/api/modules/gao/service/GaoPointRuleService.java @@ -19,6 +19,17 @@ public interface GaoPointRuleService extends BaseService { /// @return 规则列表 List listActive(String storeId, String eventId, long now); + /// 查询规则 ID 列表 + /// + /// @param idList 规则 ID 列表 + /// @return 规则列表 + List listByIdList(List idList); + + /// 按客户端提交的顺序更新启用规则优先级 + /// + /// @param idList 规则 ID 列表 + void sort(List idList); + /// 创建积分规则 /// /// @param rule 积分规则 diff --git a/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoPointRuleServiceImplement.java b/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoPointRuleServiceImplement.java index b48d33a..c15b3ec 100644 --- a/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoPointRuleServiceImplement.java +++ b/src/main/java/com/imyeyu/api/modules/gao/service/implement/GaoPointRuleServiceImplement.java @@ -16,6 +16,11 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; /// GAO 客户积分规则服务实现 /// @@ -42,6 +47,32 @@ public class GaoPointRuleServiceImplement extends AbstractEntityService listByIdList(List idList) { + if (TimiJava.isEmpty(idList)) { + return List.of(); + } + return mapper.selectByIdList(new LinkedHashSet<>(idList)); + } + + @Transactional(TimiServerDBConfig.ROLLBACKER) + @Override + public void sort(List idList) { + if (TimiJava.isEmpty(idList)) { + return; + } + List distinctIdList = new ArrayList<>(new LinkedHashSet<>(idList)); + Map ruleMap = mapper.selectByIdList(new LinkedHashSet<>(distinctIdList)).stream() + .collect(Collectors.toMap(GaoPointRule::getId, Function.identity())); + TimiException.requiredTrue(ruleMap.size() == distinctIdList.size(), "积分规则列表包含不存在的规则"); + for (int i = 0; i < distinctIdList.size(); i++) { + GaoPointRule rule = ruleMap.get(distinctIdList.get(i)); + TimiException.requiredTrue(rule.getStatus() == GaoPointRule.Status.ACTIVE, "只能调整启用规则排序"); + rule.setPriority(i); + mapper.update(rule); + } + } + @Transactional(TimiServerDBConfig.ROLLBACKER) @Override public void create(GaoPointRule rule) { @@ -149,6 +180,7 @@ public class GaoPointRuleServiceImplement extends AbstractEntityService + +