博客
关于我
C# 生成编号(防并发)
阅读量:419 次
发布时间:2019-03-06

本文共 946 字,大约阅读时间需要 3 分钟。

生成编号系统设计与实现

为了满足多个业务需求下的编号生成场景,我设计并实现了一个通用编号生成系统。该系统采用年月日前缀加两位编号的模式,例如:2018101001、2018101002等。以下将详细介绍系统的设计思路、数据库表结构、存储过程实现以及相关代码逻辑。

数据库表设计

首先,创建了主表CM_CodeNo,字段包括:

  • Id(整数,自增主键)
  • CodeCate(varchar(50),分类名称,如产品编号、评估编号等)
  • VersionNum(timestamp,乐观锁版本号)
  • CodeYear、CodeMonth、CodeDay(分别对应年、月、日)
  • CodeValue(无效字段)
  • CodeCount(今日生成数量)
  • AddTime(生成时间)

该表设计考虑了乐观锁机制,通过VersionNum字段处理并发问题。

存储过程实现

存储过程LockCodeNoProc主要负责获取当前分类下的编号数量,并在并发环境下保证编号的唯一性。存储过程逻辑如下:

  • 获取当前日期的年、月、日。
  • 检查当前分类下今日已生成的编号数量。
  • 若数量为0,插入新编号。
  • 否则,获取当前分类下的最新编号,并处理并发更新。
  • C#代码实现

    在C#层,GetCodeNo方法通过调用存储过程获取编号信息。为了处理并发,采用重复请求机制,最大重试次数为10次。若IsSuccess返回false,表示发生并发,需重复请求。

    DAL层实现

    数据访问层通过DataAccessBroker调用存储过程,返回结果并转换为PortalCodeModel对象。处理结果中的IsSuccess和CodeCount字段,更新业务逻辑层。

    枚举类设计

    CodeCateEnum枚举了主要的编号分类,如现场考察、非设计类评估等,每个枚举值带有描述属性,便于展示和维护。

    模型类设计

    PortalCodeModel用于返回生成结果,包含IsSuccess和Result字段。Result表示当前分类下的最大编号值,IsSuccess表示是否成功生成。

    系统设计总结

    该系统采用乐观锁机制处理并发,确保在高并发场景下生成唯一编号。通过模块化设计,便于扩展支持更多分类和优化性能。未来可考虑增加编号格式自定义功能,提升系统的灵活性和适用性。

    转载地址:http://vvlkz.baihongyu.com/

    你可能感兴趣的文章
    python基础篇(11):封装
    查看>>
    python基础篇(10):自定义包
    查看>>
    python基础篇(10):类、对象与构造方法
    查看>>
    python系列【仅供参考】:python测试javaSDK总结
    查看>>
    python系列【仅供参考】:python斗地主
    查看>>
    Python基础教程(第2版 修订版) pdf
    查看>>
    python基础实践(四)
    查看>>
    Python基础学习笔记(九)常用数据类型转换函数
    查看>>
    Python基础学习参考(五):字符串和编码
    查看>>
    Python基础学习
    查看>>
    python基础变量之---集合
    查看>>
    python基础变量之---字典
    查看>>
    python基础变量之---列表
    查看>>
    python基础变量之---元组
    查看>>
    python基础内容_Python基础入门必须了解的
    查看>>
    Python基础之面向对象2(封装)
    查看>>
    Python基础之给函数增加元信息
    查看>>
    python基础之字符编码
    查看>>
    python基础之多线程与多进程(二)
    查看>>
    Python基础之基本数据类型一《数字与字符串》
    查看>>