Guidewire ClaimCenter支票唯一ID生成实现技术咨询
Guidewire ClaimCenter 支票唯一ID生成实现(基于SequenceUtil)
前提准备
在ClaimCenter系统配置中创建专属序列:
- 进入 Configuration > System > Sequences
- 新增序列(比如命名为
PAYMENT_CHECK_NUMBER),设置起始值、步长等参数
代码实现修改
基于你提供的代码框架,调整如下:
package libraries uses gw.plugin.claimnumbergen.IClaimNumGenAdapter uses gw.plugin.util.SequenceUtil uses java.text.SimpleDateFormat class PaymentNumberGenerate implements IClaimNumGenAdapter { // 定义支票编号前缀,可根据业务需求修改 private static final String CHECK_NUMBER_PREFIX = "CHK-" // 序列名称,需与系统配置中创建的序列名一致 private static final String SEQUENCE_NAME = "PAYMENT_CHECK_NUMBER" override function generateNewClaimNumber(claim : Claim) : String { // 获取下一个序列值 def sequenceValue = SequenceUtil.getNextSequenceValue(SEQUENCE_NAME) // 格式化编号:前缀 + 补零后的序列值(比如补到8位) return "${CHECK_NUMBER_PREFIX}${String.format("%08d", sequenceValue)}" } override function generateTempClaimNumber(claim : Claim) : String { // 生成临时编号:前缀 + 当前时间戳,避免重复 def timestamp = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) return "${CHECK_NUMBER_PREFIX}TEMP-${timestamp}" } override function cancelNewClaimNumber(claim : Claim, claimNumber : String) { // 若需要回收已生成的编号,调用SequenceUtil.returnSequenceValue // 注意:仅当编号未被实际使用时才建议回收,否则会导致重复 if (claimNumber.startsWith(CHECK_NUMBER_PREFIX) && !claimNumber.contains("TEMP")) { def sequencePart = claimNumber.replace(CHECK_NUMBER_PREFIX, "") try { def sequenceValue = Integer.parseInt(sequencePart) SequenceUtil.returnSequenceValue(SEQUENCE_NAME, sequenceValue) } catch (NumberFormatException e) { // 日志记录解析失败,可根据需求添加 log.error("Failed to parse check number for cancellation: ${claimNumber}", e) } } } }
关键说明
- SequenceUtil核心方法:
getNextSequenceValue(String sequenceName):从指定序列获取下一个唯一值,系统自动维护序列递增returnSequenceValue(String sequenceName, Long value):将未使用的序列值回收,仅在编号未被持久化时使用
- 编号格式化:通过
String.format补零保证编号长度一致,便于后续存储和展示 - 临时编号:用时间戳生成临时值,适用于需要临时标识但未最终确认的场景
内容的提问来源于stack exchange,提问作者manswaag
相关产品推荐
相关产品推荐

