diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/dal/mysql/codegen/CodeRuleMapper.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/dal/mysql/codegen/CodeRuleMapper.java new file mode 100644 index 00000000..0a0f0003 --- /dev/null +++ b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/dal/mysql/codegen/CodeRuleMapper.java @@ -0,0 +1,43 @@ +package cn.code.nl.module.base.dal.mysql.codegen; + +import cn.code.nl.framework.common.pojo.PageResult; +import cn.code.nl.framework.mybatis.core.mapper.BaseMapperX; +import cn.code.nl.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.code.nl.module.base.controller.admin.codegen.vo.CodeRulePageReqVO; +import cn.code.nl.module.base.dal.dataobject.codegen.CodeRuleDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 编码规则 Mapper + * + * @author zhouz + */ +@Mapper +public interface CodeRuleMapper extends BaseMapperX { + + /** + * 分页查询编码规则 + * + * @param reqVO 查询条件 + * @return 分页结果 + */ + default PageResult selectPage(CodeRulePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(CodeRuleDO::getRuleName, reqVO.getRuleName()) + .eqIfPresent(CodeRuleDO::getRuleCode, reqVO.getRuleCode()) + .eqIfPresent(CodeRuleDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(CodeRuleDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(CodeRuleDO::getId)); + } + + /** + * 根据规则编码查询 + * + * @param ruleCode 规则编码 + * @return 编码规则 + */ + default CodeRuleDO selectByRuleCode(String ruleCode) { + return selectOne(CodeRuleDO::getRuleCode, ruleCode); + } + +} diff --git a/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/dal/mysql/codegen/CodeSequenceMapper.java b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/dal/mysql/codegen/CodeSequenceMapper.java new file mode 100644 index 00000000..9a8a82b3 --- /dev/null +++ b/nl-module-base/nl-module-base-server/src/main/java/cn/code/nl/module/base/dal/mysql/codegen/CodeSequenceMapper.java @@ -0,0 +1,44 @@ +package cn.code.nl.module.base.dal.mysql.codegen; + +import cn.code.nl.framework.mybatis.core.mapper.BaseMapperX; +import cn.code.nl.module.base.dal.dataobject.codegen.CodeSequenceDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 编码流水号段 Mapper + * + * @author zhouz + */ +@Mapper +public interface CodeSequenceMapper extends BaseMapperX { + + /** + * 根据规则ID和重置键查询流水记录 + * + * @param ruleId 规则ID + * @param resetKey 重置维度键 + * @return 流水记录 + */ + default CodeSequenceDO selectByRuleIdAndResetKey(Long ruleId, String resetKey) { + return selectOne(CodeSequenceDO::getRuleId, ruleId, + CodeSequenceDO::getResetKey, resetKey); + } + + /** + * 号段预分配:原子更新 current_value = current_value + step + * + * @param ruleId 规则ID + * @param resetKey 重置维度键 + * @param step 预取步长 + * @param startAt 起始值(用于首次初始化) + * @param maxValue 最大值上限 + * @return 更新行数 + */ + int updateCurrentValueBySegment(@Param("ruleId") Long ruleId, + @Param("resetKey") String resetKey, + @Param("step") int step, + @Param("startAt") Long startAt, + @Param("maxValue") Long maxValue); + +} diff --git a/nl-module-base/nl-module-base-server/src/main/resources/mapper/codegen/CodeSequenceMapper.xml b/nl-module-base/nl-module-base-server/src/main/resources/mapper/codegen/CodeSequenceMapper.xml new file mode 100644 index 00000000..74909a0f --- /dev/null +++ b/nl-module-base/nl-module-base-server/src/main/resources/mapper/codegen/CodeSequenceMapper.xml @@ -0,0 +1,20 @@ + + + + + + + INSERT INTO base_code_sequence (rule_id, reset_key, current_value, max_value) + VALUES (#{ruleId}, #{resetKey}, #{startAt} + #{step} - 1, #{maxValue}) + ON DUPLICATE KEY UPDATE + current_value = current_value + #{step}, + max_value = #{maxValue} + + + diff --git a/sql/mysql/add26071501.sql b/sql/mysql/add26071501.sql index 23d6bb7b..e30c4347 100644 --- a/sql/mysql/add26071501.sql +++ b/sql/mysql/add26071501.sql @@ -32,5 +32,5 @@ CREATE TABLE base_code_sequence ( update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', deleted TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (id), - KEY idx_rule_reset (rule_id, reset_key) + UNIQUE KEY idx_rule_reset (rule_id, reset_key) ) COMMENT '编码流水号段记录表';