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

    你可能感兴趣的文章
    OpenCV Python围绕特定点将图像旋转X度
    查看>>
    opencv resize
    查看>>
    opencv SVM分类Demo
    查看>>
    OpenCV VideoCapture.get()参数详解
    查看>>
    opencv videocapture读取视频cap.isOpened 输出总是false
    查看>>
    opencv waitKey() 函数理解及应用
    查看>>
    OpenCV 中的图像转换
    查看>>
    OpenCV 人脸识别 C++实例代码
    查看>>
    OpenCV 在 Linux 上的 python 与 anaconda 无法正常工作.收到未实现 cv2.imshow() 的错误
    查看>>
    Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)上
    查看>>
    opencv 模板匹配, 已解决模板过大程序不工作的bug
    查看>>
    OpenCV 错误:(-215)size.width>0 &&函数imshow中的size.height>0
    查看>>
    opencv&Python——多种边缘检测
    查看>>
    opencv&python——高通滤波器和低通滤波器
    查看>>
    OpenCV+Python识别车牌和字符分割的实现
    查看>>
    OpenCV-Python接口、cv和cv2的性能比较
    查看>>
    OpenCV/Python/dlib眨眼检测
    查看>>
    opencv1-加载、修改、保存图像
    查看>>
    opencv10-形态学操作
    查看>>
    opencv11-提取水平直线和垂直直线
    查看>>