关于计数以及Index返回订单号升级版002(控制字符长度,控制年月标记,拾取未使用编号)--使用两个表来满足操作

这篇具有很好参考价值的文章主要介绍了关于计数以及Index返回订单号升级版002(控制字符长度,控制年月标记,拾取未使用编号)--使用两个表来满足操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1实现步骤以及说明

1.根据参数获取当前setNoIndex表里现在的No的index值,如果包含关键字当前对应数据,则现在SetIndexNoLeft 表中找到有无未使用并未占用的那条数据(被占用的数据IsTaken=1,生成后使用当前时间与updated时间进行比对,然后时间超过30分钟后会把状态变更为 IsTaken =0 ),如果有就返回,如果没有就创建一条新的SetIndexNoLeft记录并返回。
2.如果当前SetNoIndex下面没有数据,则新建一条数据,并且在SetIndexNoLeft 创建一条新数据创建时 IsTaken就是1,被占用。
3.在主要对象需要插入时,插入成功后数据进行删除当前 这一条Id的SetIndexNoLeft数据。

2数据库表:

表1:年月日数据生成Index数据表

USE [YingyuYubingBaogao2023]
GO

/****** Object:  Table [dbo].[SetNoIndex]    Script Date: 2023/8/17 17:54:05 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[SetNoIndex](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[NoType] [int] NULL,
	[ThisIndex] [int] NULL,
	[ThisSigle] [nvarchar](30) NULL,
	[KeyWord] [nvarchar](30) NULL,
	[CreateDate] [datetime] NULL,
	[Updated] [datetime] NULL
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[SetNoIndex] ADD  CONSTRAINT [DF_SetNoIndex_CreateDate]  DEFAULT (getdate()) FOR [CreateDate]
GO

ALTER TABLE [dbo].[SetNoIndex] ADD  CONSTRAINT [DF_SetNoIndex_Updated]  DEFAULT (getdate()) FOR [Updated]
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'0月累计,1日累计,2年累计,3,总共累计' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SetNoIndex', @level2type=N'COLUMN',@level2name=N'NoType'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'当前排序' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SetNoIndex', @level2type=N'COLUMN',@level2name=N'ThisIndex'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'当前标记(如果是日累计就是20230802,如果是月累计就是 202308 ,如果是年累计就是 2023,如果是 所有累计就是0)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SetNoIndex', @level2type=N'COLUMN',@level2name=N'ThisSigle'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'关键字' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SetNoIndex', @level2type=N'COLUMN',@level2name=N'KeyWord'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SetNoIndex', @level2type=N'COLUMN',@level2name=N'CreateDate'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'更新时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SetNoIndex', @level2type=N'COLUMN',@level2name=N'Updated'
GO

EXEC sys.sp_addextendedproperty @name=N'Name', @value=N'编号自动生成器' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SetNoIndex'
GO

表2: 生成的临时编号表

USE [YingyuYubingBaogao2023]
GO

/****** Object:  Table [dbo].[SetIndexNoLeft]    Script Date: 2023/8/17 17:55:46 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[SetIndexNoLeft](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[NoIndexId] [int] NULL,
	[NoLeft] [nvarchar](40) NULL,
	[IsTaken] [bit] NULL,
	[Updated] [datetime] NULL
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[SetIndexNoLeft] ADD  CONSTRAINT [DF_SetIndexNoLeft_Updated]  DEFAULT (getdate()) FOR [Updated]
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'编号IndexId' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SetIndexNoLeft', @level2type=N'COLUMN',@level2name=N'NoIndexId'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'剩下的编号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SetIndexNoLeft', @level2type=N'COLUMN',@level2name=N'NoLeft'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否被占用' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SetIndexNoLeft', @level2type=N'COLUMN',@level2name=N'IsTaken'
GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'处理时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SetIndexNoLeft', @level2type=N'COLUMN',@level2name=N'Updated'
GO

EXEC sys.sp_addextendedproperty @name=N'Name', @value=N'编号拾取的明细端' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'SetIndexNoLeft'
GO

3.需要的Model对象创建

 public class SetIndexNoLeft
    {
        /// <summary>
        /// 
        /// </summary>
        [Description("")]
        public int Id { get; set; }
        /// <summary>
        /// 编号IndexId
        /// </summary>
        [Description("编号IndexId")]
        public int NoIndexId { get; set; }
        /// <summary>
        /// 剩下的编号
        /// </summary>
        [Description("剩下的编号")]
        public string NoLeft { get; set; }
        /// <summary>
        /// 是否被占用
        /// </summary>
        [Description("是否被占用")]
        public bool IsTaken { get; set; }
        /// <summary>
        /// 处理时间
        /// </summary>
        [Description("处理时间")]
        public DateTime Updated { get; set; }
        /// <summary>
        /// 设置好的No全部
        /// </summary>
        public string NoOut { get; set; }
    }
     
   

参考的枚举实例(你可能用不到):

    /// <summary>
    /// 编号类型
    /// </summary>
    public enum ENoTypes
    {
        报告编号,客户编号,用户编号,样本编号,店铺编号,样本类型编号,项目编号
    }

4 DAL数据库操作类。

namespace DAL
{
    /// <summary>
    /// 编号自动生成器操作类
    /// </summary>
    public class DALSetNoIndex
    { 

        /// <summary>
        ///获取当前 0月累计,1日累计,2年累计,3,总共累计
        /// </summary>
        /// <param name="SetNoType"> 0月累计,1日累计,2年累计,3,总共累计</param>
        /// <param name="SetKeyword">当前关键字(需要的表单名子)</param>
        /// <param name="OutIndexLength">index编号长度 0001 就是4 </param>
        /// <returns></returns>
        public SetIndexNoLeft GetIndexNo(string SetKeyword, int SetNoType = 0, int OutIndexLength = 5)
        {
            string sql = $@"declare  @SetNoType int ,@SetThisSigle nvarchar(10), @SetKeyword nvarchar(10),@ThisDate nvarchar(20),@OutStr nvarchar(20),@OutStrLength int;
set @ThisDate =CONVERT(nvarchar, getdate(), 112);---当前日期全部数据(20230108)
set @SetNoType = {SetNoType};--设定类型
set @OutStrLength ={OutIndexLength};--序号保留多少位
set @SetKeyword = '{SetKeyword}';---当前关键字
Update SetIndexNoLeft set IsTaken = 0 where  datediff( minute , Updated , getdate() )>60 and IsTaken =1 ;---先更新本表中所有已过期的数据 30分钟期限
if (@SetNoType = 0)--0月累计
begin
  set @SetThisSigle = SUBSTRING(@ThisDate,1,6); 
end
else if(@SetNoType =1 )--1日累计
begin
 set @SetThisSigle = @ThisDate; 
end
else if(@SetNoType =2)--2年累计
begin 
 set @SetThisSigle = SUBSTRING(@ThisDate,1,4); 
end 
else --3总共累计
begin
 set @SetThisSigle='';
end 
 declare @SetIndex int ,@OPIndexId int,@OPIndexNoLeftId int,@HebingOutNo nvarchar(20) ;  ----@OPIndexId 为获取到当前Id ,@OPIndexNoLeftId  是获取当前数据条,@HebingOutNo 是当前要导出的数据
 set @OPIndexNoLeftId  = 0;---初始化输出表Id
 if  exists(select * from  SetNoIndex where KeyWord = @SetKeyword  and  ThisSigle = @SetThisSigle )
  begin -- 如果存在就更新 
     select @OPIndexId  = Id  from  SetNoIndex where KeyWord = @SetKeyword  and  ThisSigle = @SetThisSigle --获取对应Id
     --select @OPIndexId as OPIndexId ;
	 if  exists(select * from  SetIndexNoLeft  where [NoIndexId] = @OPIndexId   and  IsTaken =0)
      begin
	    ----select 'aaaaaa'; 
        select top 1  @OPIndexNoLeftId = Id from  SetIndexNoLeft   where  [NoIndexId] = @OPIndexId   and  IsTaken = 0 order by NoLeft; ----返回当前剩下那条数据的Id
        update SetIndexNoLeft set IsTaken = 1 ,Updated = getdate() where Id =  @OPIndexNoLeftId;  --修改当前状态
	  end 
     else 
      begin 
         update SetNoIndex set ThisIndex = ThisIndex+1 ,Updated =getdate() where KeyWord = @SetKeyword  and  ThisSigle = @SetThisSigle;--先更新
         select  @SetIndex= ThisIndex from  SetNoIndex where Id =@OPIndexId ;  -- KeyWord = @SetKeyword  and  ThisSigle = @SetThisSigle ;--在提取结果
      end  
  end 
  else
  begin
      set  @SetIndex = 1;
      insert  into SetNoIndex ([NoType],[ThisIndex],[ThisSigle],[KeyWord])  values (@SetNoType,@SetIndex,@SetThisSigle,@SetKeyword);-- 插入数据
      set @OPIndexId = @@IDENTITY;--- 获取当前Id
  end 
  --select DATALENGTH( @ThisDate);
  --select  @ThisDate;
  --select @SetThisSigle;
  ---select @OPIndexNoLeftId ;
  select  @HebingOutNo =  @SetThisSigle + right('00000000000'+convert(varchar, @SetIndex),@OutStrLength) from SetNoIndex where Id = @OPIndexId ; 
  if( @OPIndexNoLeftId = 0 )--表内无数据
      begin 
        insert into SetIndexNoLeft ([NoIndexId] ,[NoLeft],[IsTaken],Updated ) values (@OPIndexId,@HebingOutNo,'true',getdate());
        set @OPIndexNoLeftId= @@IDENTITY;--- 获取当前Id 
      end  
        select top 1  * from  SetIndexNoLeft where Id = @OPIndexNoLeftId; -----返回当前数据
 ";
            return  DBUtility.DapperDbHelper.Query<SetIndexNoLeft>(sql).FirstOrDefault(); 
        }


        /// <summary>
        /// 删除占用
        /// </summary>
        /// <param name="ID">ID</param>
        /// <returns></returns>
        public ResultMsg Delete(int ID)
        {
            ResultMsg msg = new ResultMsg();
            try
            {
                string sql = "DELETE [SetIndexNoLeft] WHERE[ID] = @ID";
                msg.ReturnInt = DapperDbHelper.Execute(sql, new { ID = ID });
                msg.Success = true;
                return msg;
            }
            catch (Exception ex)
            {
                msg.Success = false;
                msg.ErrMsg = ex.Message;
            }
            return msg;
        }

        /// <summary>
        /// 释放占用
        /// </summary>
        /// <param name="ID">ID</param>
        /// <returns></returns>
        public ResultMsg CleanTaken(int ID)
        {
            ResultMsg msg = new ResultMsg();
            try
            {
                string sql = "Update  [SetIndexNoLeft] set IsTaken =0   WHERE[ID] = @ID";
                msg.ReturnInt = DapperDbHelper.Execute(sql, new { ID = ID });
                msg.Success = true;
                return msg;
            }
            catch (Exception ex)
            {
                msg.Success = false;
                msg.ErrMsg = ex.Message;
            }
            return msg;
        }


4 引用方式:
其中你需要的那个数据就是 返回对象 SetIndexNoLeft 属性的 NoOut

    /// <summary>
    /// 获取当前编号
    /// </summary>
    /// <param name="ThisType">当前类型</param>
    /// <param name="DPNO">店铺No</param>
    /// <param name="PhoneNo">电话号码后四位</param>
    /// <returns></returns>
    public SetIndexNoLeft GetNoByType(ENoTypes ThisType, string DPNO = "",string PhoneNo="0000")
    {
        SetIndexNoLeft GetFromDB = null;//数据库获取的数据 
      
        switch (ThisType)
        {
            case ENoTypes.客户编号:
                GetFromDB = GetIndexNo($"客户编号{DPNO}", 2, 3);
                GetFromDB.NoOut = $"YYU{DPNO}KH{GetFromDB.NoLeft}{PhoneNo}"; //YYU+001(店铺编号)+KH+2023(年)+999(流水号)+0000(电话号码后4位)
                break;
            case ENoTypes.店铺编号:
                GetFromDB = GetIndexNo("店铺编号", 3, 3);
                GetFromDB.NoOut = GetFromDB.NoLeft; //001(店铺编号)
                break;
            case ENoTypes.报告编号:
                GetFromDB = GetIndexNo($"报告编号{DPNO}", 1, 2);
                GetFromDB.NoOut = $"YYU{DPNO}{GetFromDB.NoLeft}"; //YYU+001(店铺编号)+2023(年)+08(月)+02(日)+99(流水号)
                break;
            case ENoTypes.样本编号:
                GetFromDB = GetIndexNo($"样本编号{DPNO}", 1, 2);
                GetFromDB.NoOut = $"YYU{DPNO}YB{GetFromDB.NoLeft}"; //YYU+001(店铺编号)+YB+2023(年)+08(月)+02(日)+99(2位流水号)
                break;
            case ENoTypes.样本类型编号:
                GetFromDB = GetIndexNo("样本类型编号", 2, 3);
                GetFromDB.NoOut = $"YYUYBLX{GetFromDB.NoLeft}"; //YYU+001(店铺编号)+YB+2023(年)+08(月)+02(日)+99(2位流水号)
                break;
            case ENoTypes.项目编号:
                GetFromDB = GetIndexNo("项目编号", 3, 3);
                GetFromDB.NoOut = $"YYUXM{GetFromDB.NoLeft}"; // 
                break;
            default://用户编号
                GetFromDB = GetIndexNo("用户编号", 3, 5);
                GetFromDB.NoOut = $"YYU{GetFromDB.NoLeft}"; //YYU+99999(流水号)
                break;
        }
        return GetFromDB; 
    } 
}

在程序里的应用:文章来源地址https://www.toymoban.com/news/detail-654248.html

 SetIndexNoLeft ThisNoLeft = null;//设置全局

ThisNoLeft = new DALSetNoIndex().GetNoByType(ENoTypes.客户编号,thisMendian.No, PhoneNo);//设定指定的编号
 No.Text = ThisNoLeft.NoOut;


 if (ThisNoLeft!=null )//插入数据完成后进行数据删除
   {
                        new DAL.DALSetNoIndex().Delete(ThisNoLeft.Id);
 }

到了这里,关于关于计数以及Index返回订单号升级版002(控制字符长度,控制年月标记,拾取未使用编号)--使用两个表来满足操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于小程序订单中心页设置的公告

    为进一步规范小程序交易生态、提升用户购物体验、满足用户在有交易的小程序中便捷查看订单信息的诉求,自2022年12月31日起,对于有“选择商品/服务-下单-支付”功能的小程序,需按照平台制定的规范,在小程序内设置订单中心页。 开发者需将小程序订单中心页的path同步

    2024年02月08日
    浏览(25)
  • Elasticsearch(八)搜索---搜索辅助功能(上)--指定搜索返回字段,结果计数和分页

    前面我们已经将ES的基础操作(索引,映射,文档)学习过了,从这一章开始,我们便开始学习ES的最大的功能—搜索 ES为用户提供了丰富的搜索功能:既有基本的搜索功能,又有搜索建议功能;既有常用的普通类型的匹配功能,又有基于地理位置的搜索功能;既提供了分页搜

    2024年02月05日
    浏览(39)
  • Spring Task 实现定时任务 以及 WebSocket 实现 订单提醒 (学习笔记)

    1.maven坐标 spring-context 2.启动类添加注解 @EnableScheduling 开启任务调度 3.自定义定时任务类 去设置网站设置要 进行得定时任务 cron表达式在线生成器:https://cron.qqe2.com/ 1.导入maven坐标 2.导入websocket组件 3.设置配置类 4.导入代码 前端测试代码

    2024年02月20日
    浏览(28)
  • 极兔速递单号查询入口,根据物流更新量来筛选单号

    在处理大量快递单号时,我们常常会遇到这样的困扰:信息混乱、查询困难、管理不便。而【快递批量查询高手】就是针对这些问题设计的,它可以根据你的实际需求,按照各种条件来进行筛选,比如更新量、派件员、发出物流时间等,轻松帮你筛选出需要的单号。 所需工具

    2024年01月23日
    浏览(88)
  • 【关于Modelsim仿真】4位计数器的设计与仿真

    其实这篇应该是FPGA学习的第一篇,之前一篇使用的黑金的AX301开发板,但是因为种种原因,迟迟没写,这里使用VScode进行编程 VScode可以直接从腾讯电脑管家中下载我就不给链接了。 其他软件的安装与关联在此就不过多赘述了,VScode安装成功后,需要安装一些插件: ex就是e

    2023年04月08日
    浏览(30)
  • 关于网页视频下载方法(仅针对存在index.m3u8)

    必备工具:迅雷、ffmpeg、python环境 选用工具:猫抓插件 像腾讯课堂希望下载的课 1.下载m3u8文件。 首先使用【猫抓视频下载】的浏览器拓展,可以清晰地看到,它不抓到的内容。我们需要的就是这个 .m3u8 的文件。 ps:其中可以也将其中的一个ts文件下下来,主要需要的是它的

    2024年02月06日
    浏览(29)
  • 简单的RabbitMQ集成Springboot实现订单异步发送功能示例以及RabbitMQ的相关问题

    引入RabbitMQ的依赖,在pom.xml文件中添加以下代码: 在application.properties文件中配置RabbitMQ的相关信息: 创建消息队列,并定义消息接收者: 定义消息发送者: 在需要发送订单信息的地方调用OrderSender的send方法即可: RabbitMQ是一个开源的消息中间件,主要用于实现应用之间的异

    2024年02月09日
    浏览(25)
  • 关于nn.CrossEntropyLoss交叉熵损失中weight和ignore_index参数

    目录 1. 交叉熵损失 CrossEntropyLoss 2. ignore_index 参数 3. weight 参数 4. 例子 CrossEntropyLoss 交叉熵损失可函数以用于分类或者分割任务中,这里主要介绍分割任务 建立如下的数据,pred是预测样本,label是真实标签 分割中,使用交叉熵损失的话,需要保证label的维度比pred维度少1,

    2023年04月17日
    浏览(36)
  • 计数器简介以及FPGA实现

    在时序逻辑电路中,最基本的单元是寄存器,本篇将会介绍如何利用寄存器,实现一个具有计数器功能的电路。在FPGA开发中,一切与时间有关的设计都会用到计数器,所以学会设计计数器至关重要。 计数是一种最简单基本的运算,计数器就是实现这种运算的逻辑电路,计数

    2024年02月05日
    浏览(42)
  • 关于引入uview-ui @import “uview-ui/index.scss“;报错

    在APP.vue中加上lang=\\\"scss style lang=\\\"scss\\\"     /*每个页面公共css */ @import \\\"uview-ui/index.scss\\\"; /style  

    2024年02月02日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包