博客
关于我
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/

    你可能感兴趣的文章
    PowerDesigner使用教程:给字段添加唯一约束
    查看>>
    QGIS中怎样设置图层样式并导出地图样式
    查看>>
    PowerDesigner使用笔记
    查看>>
    QGIS中怎样实现数据坐标系转换
    查看>>
    PowerDesigner学习--基本步骤
    查看>>
    PowerDesigner导出Report通用报表
    查看>>
    PowerDesigner教程系列(二)概念数据模型
    查看>>
    Powerdesigner显示表的comment和列的comment的方法
    查看>>
    PowerDesigner最基础的使用方法入门学习
    查看>>
    PowerDesigner版本控制器设置权限
    查看>>
    PowerDesigner生成数据模型并导出报告
    查看>>
    QGIS中导入dwg文件并使用GetWKT插件获取绘制元素WKT字符串以及QuickWKT插件实现WKT显示在图层
    查看>>
    PowerDesigner逆向工程从SqlServer数据库生成PDM(图文教程)
    查看>>
    PowerEdge T630服务器安装机器学习环境(Ubuntu18.04、Nvidia 1080Ti驱动、CUDA及CUDNN安装)
    查看>>
    PowerPC-object与elf中的符号引用
    查看>>
    QFileSystemModel
    查看>>
    Powershell DSC 5.0 - 参数,证书加密账号,以及安装顺序
    查看>>
    PowerShell 批量签入SharePoint Document Library中的文件
    查看>>
    Powershell 自定义对象小技巧
    查看>>
    pytorch从预训练权重加载完全相同的层
    查看>>