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

    你可能感兴趣的文章
    Nodejs教程09:实现一个带接口请求的简单服务器
    查看>>
    nodejs服务端实现post请求
    查看>>
    nodejs框架,原理,组件,核心,跟npm和vue的关系
    查看>>
    Nodejs概览: 思维导图、核心技术、应用场景
    查看>>
    nodejs模块——fs模块
    查看>>
    Nodejs模块、自定义模块、CommonJs的概念和使用
    查看>>
    nodejs生成多层目录和生成文件的通用方法
    查看>>
    nodejs端口被占用原因及解决方案
    查看>>
    Nodejs简介以及Windows上安装Nodejs
    查看>>
    nodejs系列之express
    查看>>
    nodejs系列之Koa2
    查看>>
    Nodejs连接mysql
    查看>>
    nodejs连接mysql
    查看>>
    NodeJs连接Oracle数据库
    查看>>
    nodejs配置express服务器,运行自动打开浏览器
    查看>>
    NodeMCU教程 http请求获取Json中文乱码解决方案
    查看>>
    Nodemon 深入解析与使用
    查看>>
    NodeSession:高效且灵活的Node.js会话管理工具
    查看>>
    node~ http缓存
    查看>>
    node不是内部命令时配置node环境变量
    查看>>