C#:lock锁与订单号(或交易号)的生成
在弄电商类网站的时候,往往是根据年月日时分秒的格式生成订单号(yyyyMMddHHmmss),为了解决并发性,就直接在生成订单号的区域块加上lock。
static void Main(string[] args){for(int i=0; i<100; i++){//GetRandomTime();GenerateId();}}private static readonly object Locker = new object();private static int _sn = 0;/// <summary>/// 生成编码/// </summary>/// <returns></returns>public static string GenerateId(){lock (Locker) //lock 关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。{if (_sn == int.MaxValue){_sn = 0;}else{_sn++;}Thread.Sleep(100);//string DateStr = DateTime.Now.ToString("yyyyMMddHHmmssMM");//日期string Code = "Wen" + DateTime.Now.ToString("yyyyMMddHHmmssMM") + _sn.ToString().PadLeft(10, '0');//单据号的长度为10位长度,不够10位长度的在左边补足对应个数的0Console .WriteLine(Code);return Code;}}

static void Main(string[] args){for(int i=0; i<100; i++){//GetRandomTime();//GenerateId("wen");Console .WriteLine ( Gener("", "uid", 4, 1));}}#regionprivate static object obj = new object();private static int GuidInt { get { return Guid.NewGuid().GetHashCode(); } }private static string GuidIntStr { get { return Math.Abs(GuidInt).ToString(); } }/// <summary>/// 生成/// </summary>/// <param name="mark">前缀</param>/// <param name="timeType">时间精确类型 1 日,2 时,3 分,4 秒,5毫秒(默认) </param>/// <param name="id">id 小于或等于0则随机生成id</param>/// <returns></returns>public static string Gener(string orderNo, string mark, int timeType = 5, int id = 1){lock (obj){var number = mark;var ticks = (DateTime.Now.Ticks - GuidInt).ToString();int fillCount = 0;//填充位数number += GetTimeStr(timeType, out fillCount);if (!string.IsNullOrEmpty(orderNo)){var numberNo = orderNo.Substring(25);if (numberNo.Length > 3){number += $"{ticks.Substring(ticks.Length - (fillCount + 3))}{(long.Parse(numberNo) + 1)}";}else{int count = numberNo.Count(x => x == '0');var str = (long.Parse(numberNo) + 1).ToString();str = str.PadLeft(count == 1 ? count + 2 : count + 1, '0');number += $"{ticks.Substring(ticks.Length - (fillCount + 3))}{str}";}}else if (id > 0){//number += ticks.Substring(ticks.Length - (fillCount + 3)) + id.ToString().PadLeft(10, '0');number += $"{ticks.Substring(ticks.Length - (fillCount + 3))}{id.ToString().PadLeft(3, '0')}";}else{number += ticks.Substring(ticks.Length - (fillCount + 3)) + GuidIntStr.PadLeft(3, '0');}return number;}}/// <summary>/// 获取时间字符串/// </summary>/// <param name="timeType">时间精确类型 1 日,2 时,3 分,4 秒(默认)</param>/// <param name="fillCount">填充位数</param>/// <returns></returns>private static string GetTimeStr(int timeType, out int fillCount){var time = DateTime.Now;if (timeType == 1){fillCount = 6;return time.ToString("yyyyMMdd");}else if (timeType == 2){fillCount = 4;return time.ToString("yyyyMMddHH");}else if (timeType == 3){fillCount = 2;return time.ToString("yyyyMMddHHmm");}else if (timeType == 4){fillCount = 0;return time.ToString("yyyyMMddHHmmss");}else{fillCount = 0;return time.ToString("yyyyMMddHHmmssffff");}}#endregion

相关文章:
C#:lock锁与订单号(或交易号)的生成
在弄电商类网站的时候,往往是根据年月日时分秒的格式生成订单号(yyyyMMddHHmmss),为了解决并发性,就直接在生成订单号的区域块加上lock。 static void Main(string[] args){for(int i0; i<100; i){//GetRandomTime(…...
计算机图形学入门11:图形管线与着色器
1.什么是图形管线 把场景中的物体经过一系列的处理,最后一张图像的形式在屏幕上显示出来,这一系列过程就是图形管线(Graphics Pipeline),也叫实时渲染管线(Real-time Rendering Pipeline)。如下图所示,为整个渲染管线的过程。 渲染…...
正解 x86 Linux 内存管理
1,机器解析的思路 发现网络上大量的教程,多是以讹传讹地讲解 Linux 内存管理; 都是在讲: 逻辑地址 -> 线性地址 -> 物理地址 这个转换关系是怎么发生的。 上面这个过程确实是程序运行时地址的翻译顺序; …...
springboot读取配置时,读取到了系统环境变量
在Spring Boot应用中,读取配置通常通过application.properties或application.yml文件进行。不过,Spring Boot也支持从系统环境变量读取配置,这使得应用可以在不同的环境中灵活配置。下面详细介绍如何在Spring Boot中读取系统环境变量。 1. 配…...
平均召回(Average Recall,AR)概述
平均召回(Average Recall,AR)概述 在深度学习中,平均召回(Average Recall, AR)是一个衡量模型在不同阈值下的召回率的综合指标,特别常用于目标检测任务。召回率(Recall)…...
WWDC 2024 回顾:Apple Intelligence 的发布与解析
一年一度的苹果全球开发者大会(WWDC)如期而至,2024 年的 WWDC 再次成为科技界的焦点。本次发布会中,苹果正式推出了他们在 AI 领域的全新战略——Apple Intelligence。这一全新概念旨在为用户打造“强大、易用、全面、个性化、注重…...
[Cloud Networking] SPDY 协议
文章目录 1. 背景2. SPDY 之前3. SPDY 项目目标4. SPDY 功能特点4.1 SPDY基本功能4.2 SPDY高级功能 1. 背景 TCP是通用的、可靠的传输协议,提供保证交付、重复抑制、按顺序交付、流量控制、拥塞避免和其他传输特性。 HTTP是提供基本请求/响应语义的应用层协议。 不…...
Linux-笔记 samba实现映射网络驱动器到Win 10
前言 之前通过网上的方法成功映射后,现如今在自己电脑想实现映射服务器共享文件夹到Win 10端发现对之前的方法没有总结导致细节出问题,特此写下笔记。 场景 在服务器编译好代码生成镜像后,在Win10端采用软件烧写镜像,但是镜像在服…...
【技巧】Leetcode 67. 二进制求和【简单】
二进制求和 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 示例 1: 输入:a “11”, b “1” 输出:“100” 示例 2: 输入:a “1010”, b “1011” 输出:“10101” 解题思路 …...
vue项目问题汇总
1.el-select: 下拉框显示到了top:-2183px , 添加属性 :popper-append-to-body"false" 2. el-upload: 选过的文件在使用过后记得清空,因为如果有limit1的时候,没有清空会导致不触发onchange 使用自定义上传方法http-request的时…...
Android 工程副总裁卸任
Android 工程副总裁卸任 Android工程副总裁Dave Burke宣布,他将辞去领导Android工程的职位,将重心转向“AI/生物”项目。不过,他并没有离开Alphabet,目前仍将担任Android系统开发顾问的角色。 Burke参与了Android系统的多个关键…...
Qt 6.13
作业: #include "mywidget.h"mywidget::mywidget(QWidget *parent): QWidget(parent) {this->setStyleSheet("background-color:white");this->resize(600,600);this->setWindowFlag(Qt::FramelessWindowHint);this->setWindowTit…...
发布自己的c#包到nuget
1)创建自己的nuget账号 NuGet Gallery | Home 2)在Rider中-->项目邮件-->properties 注意:必须勾选生成nuget包 3)编译后,将生成一个包 4)点击上传包 5)将之前的nuget包拖拽过来,点击上传即可,如果有不对的比如…...
【学习笔记】MySQL(Ⅲ)
MySQL(Ⅲ) 11、 进阶篇 —— 视图 11.1、概述 11.2、基本语法 11.3、检查选项 CASCADED 11.4、检查选项 LOCAL 11.5、视图的更新原则12、 进阶篇 —— 存储过程 12.1、概述 12.2、基本语法 12.3、系统变量 12.4、用户定义变量 …...
STM32项目分享:心率血氧手环(可报警)
目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板打样焊接图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: https://www.bilibili.c…...
前端面经总结、学习【2023秋招】
目录 1、浏览器输入URL发生了什么?2、跨域是什么?如何解决跨域问题?3、cookie 是什么?4、cookie 能做什么? 1、浏览器输入URL发生了什么? URL解析:判断浏览器输入的是搜索内容还是URLÿ…...
Linux DMA-Buf驱动框架
一、DMABUF 框架 dmabuf 是一个驱动间共享buf 的机制,他的简单使用场景如下: 用户从DRM(显示驱动)申请一个dmabuf,把dmabuf 设置给GPU驱动,并启动GPU将数据输出到dmabuf,GPU输出完成后…...
MySQL之优化服务器设置(三)
优化服务器设置 InnoDB表空间 InnoDB把数据保存在表空间内,本质上是一个由一个或多个磁盘文件组成的虚拟文件系统。InnoDB用表空间实现很多功能,并不只是存储表和索引。它还保存了回滚日志(旧版本行)、插入缓冲(Insert Buffer)、双写缓冲(Doublewrite …...
如何实现 Python 源码压缩加密常用解决方案详细教程(更新中)
Python是一种高级的、解释型的、面向对象的编程语言,Python 码简洁易读,并且Python语言跨平台,拥有丰富的标准库和第三方库,深受开发人员的喜爱。 Python 程序扩展名 .py:这是 Python 程序的标准文件扩展名。当你创建…...
SAP Build 2-PDF数据提取与决策
0. 安装desktop agent 在后续过程中发现要预先安装desktop agent,否则没法运行自动化流程… 0.1 agent下载 参考官方文档说明 https://help.sap.com/docs/build-process-automation/sap-build-process-automation/create-user-in-rbsc-download-repository?loca…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...
