• 首页
  • 产品中心
    • 数式Oinone四大产品

      低代码开发平台无代码开发平台集成开发平台AI大模型开发
    • 数式Oinone体系能力

      用户与组织权限管理文件管理消息中心国际化业务审计
    • 数式Oinone核心产品特性

      低无一体面向软件公司场景无限制应用级扩容可分可合
  • 服务中心
    • 客户服务

      预约演示方案咨询私有部署找人定制
    • 开发者

      问答下载
    • Oinone学院

      社区学习

    《精讲面向软件公司的低代码平台——以Oinone为例》

  • 合作伙伴
    渠道申请伙伴名录专家库
  • 关于数式
0571-88757863

序列获取:如何在项目中手动获取序列


实际项目中在特定情况下可能需要手动获取序列,如编码规则: 动态值+序列; 而动态值是根据业务数据确定的,那么这种场景下就需要通过手动的方式获取序列了。

一、手动获取序列示例

(一)获取方式示例1

/**
 * 在特定场景下需要手动code
 */
public void manualSetIdCode(){
    DemoItem demoItem = new DemoItem();
    // 手动生成code
    Object codeObj = CommonApiFactory.getSequenceGenerator().generate("SEQ",DemoItem.MODEL_MODEL);
    String code = TypeUtils.stringValueOf(codeObj);
    demoItem.setCode(code);

    //……
}

(二)获取方式示例2

当手动获取更复杂的序列规则的时候,可以先定义序列的规则,然后在业务代码中手动进行调用。

1、在系统启动的时初始化 SequenceConfig

public class SeqConstants {
    /**
     * 订单编码序列常量
     */
    public static final String SAMPLE_ORDER_SEQ = "SAMPLE_ORDER_SEQ";

    /**
     * 订单编码序列常量
     */
    public static final String SAMPLE_APPLY_SEQ = "SAMPLE_APPLY_SEQ";

}
package pro.shushi.pamirs.demo.core.init;

import org.springframework.stereotype.Component;
import pro.shushi.pamirs.boot.common.api.command.AppLifecycleCommand;
import pro.shushi.pamirs.boot.common.extend.MetaDataEditor;
import pro.shushi.pamirs.core.common.InitializationUtil;
import pro.shushi.pamirs.demo.api.DemoModule;
import pro.shushi.pamirs.demo.core.constant.SeqConstants;
import pro.shushi.pamirs.meta.annotation.fun.extern.Slf4j;
import pro.shushi.pamirs.meta.api.dto.meta.Meta;
import pro.shushi.pamirs.meta.enmu.SequenceEnum;

import java.util.Map;

@Slf4j
@Component
public class DemoMetadataEditor implements MetaDataEditor {

    @Override
    public void edit(AppLifecycleCommand command, Map<String, Meta> metaMap) {
        InitializationUtil util = InitializationUtil.get(metaMap, DemoModule.MODULE_MODULE, DemoModule.MODULE_NAME);
        if (util == null) {
            return;
        }
        bizSequence(util);
    }

    @Slf4j
    @Component
    public class DemoMetadataEditor implements MetaDataEditor {

        @Override
        public void edit(AppLifecycleCommand command, Map<String, Meta> metaMap) {
            InitializationUtil util = InitializationUtil.get(metaMap, HrSimpleModule.MODULE_MODULE, HrSimpleModule.MODULE_NAME);
            if (util == null) {
                return;
            }
            bizSequence(util);
        }

        private void bizSequence(InitializationUtil util) {
            // 根据自己的业务需求初始化SequenceConfig
            util.createSequenceConfig("订单编码生成", SeqConstants.SAMPLE_ORDER_SEQ, SequenceEnum.ORDERLY_SEQ, 8)
            .setStep(1)
            .setInitial(80000000L)
            .setIsRandomStep(false);
            // 根据自己的业务需求初始化SequenceConfig
            util.createSequenceConfig("申请单编码生成", SeqConstants.SAMPLE_APPLY_SEQ, SequenceEnum.DATE_SEQ, 4)
            .setStep(1)
            .setPrefix("YP")
            .setInitial(1000L)
            .setIsRandomStep(false);
        }
    }
}

2、在业务代码中获取序列的值

public class SequenceManager {

    public static String getSaleOrderCode(String prefix) {
        Object sequence = CommonApiFactory.getSequenceGenerator().generate(SequenceEnum.ORDERLY_SEQ.value(),
                                                                           SeqConstants.SAMPLE_ORDER_SEQ);
        return prefix + TypeUtils.stringValueOf(sequence);
    }

    public static String getApplyOrderCode(String prefix) {
        Object sequence = CommonApiFactory.getSequenceGenerator().generate(SequenceEnum.ORDERLY_SEQ.value(),
                                                                           SeqConstants.SAMPLE_APPLY_SEQ);
        return prefix + TypeUtils.stringValueOf(sequence);
    }

}
public SampleSaleOrder create(SampleSaleOrder data) {
    data.construct();
    data.setCode(SequenceManager.getSaleOrderCode(data.getOrderType().getValue()));
    // 其他逻辑

    return data;
    }

二、最佳实践

1、非必要不需要手动去获取序列,直接配置模型序列或者字段序列后,在数据新增时会自动根据序列给对应的字段赋值;

2、实际项目中,把序列的标识(如示例中的 SAMPLE_ORDER_SEQ 和 SAMPLE_APPLY_SEQ)定义到一个常量中。

编辑此页
最近更新:2026/1/15 04:02
上一页
外部集成:钉钉集成OAuth2.0
下一页
开发模式:协同开发(改)
默认页脚
Copyright © 2026 Mr.Hope