zoukankan      html  css  js  c++  java
  • MySql主键自动生成,表、实体、C#调用方法

    1.表:mysql建表语句

    DROP TABLE IF EXISTS `keycode`;
    CREATE TABLE `keycode` (
    `Id` int(11) NOT NULL AUTO_INCREMENT,
    `KeyName` varchar(50) NOT NULL,
    `KeyRemark` varchar(100) NOT NULL,
    `Prefix` varchar(20) DEFAULT NULL,
    `ReSetType` int(11) NOT NULL,
    `DateFormat` longtext,
    `Length` int(11) NOT NULL,
    `Step` int(11) NOT NULL,
    `InitialValue` int(11) NOT NULL,
    `NowDate` longtext,
    `CurrentValue` int(11) NOT NULL
    PRIMARY KEY (`Id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

    2.实体:Entity

    /// <summary>
    /// 自动生成不重复流水号
    /// </summary>
    public class KeyCode
    {
    /// <summary>
    /// 键名称
    /// </summary>
    [Required, MaxLength(50)]
    public string KeyName { get; set; }
    
    /// <summary>
    /// 键说明
    /// </summary>
    [Required, MaxLength(100)]
    public string KeyRemark { get; set; }
    
    /// <summary>
    /// 前标字母
    /// </summary>
    [MaxLength(20)]
    public string Prefix { get; set; }
    
    /// <summary>
    /// 重置类型:0不重置 1重置
    /// </summary>
    public int ReSetType { get; set; }
    
    /// <summary>
    /// 日期格式 日期格式格式可以是yyyymm,yy-mm,yyyymmdd,yyyymmdd-hh等,
    /// 如果按年重置,则日期格式中必须有年,如果按月重置,则日期格式中必须有月.
    /// 如果日期格式为空:则编号中不加入日期字段
    /// </summary>
    public string DateFormat { get; set; }
    
    /// <summary>
    /// 流水号长度:如长度为4,当前流水号为123,则出来的编码为0123,不足4位的前面补0
    /// </summary>
    public int Length { get; set; }
    
    /// <summary>
    /// 步长 每个流水号生成间隔是多少,如2,表示每个生成0001,0003这种流水号';
    /// </summary>
    public int Step { get; set; }
    
    /// <summary>
    /// 初始值 初始流水号是多少,默认是0
    /// </summary>
    public int InitialValue { get; set; }
    
    /// <summary>
    /// 当前使用的日期【需更新】
    /// </summary>
    public string NowDate { get; set; }
    
    /// <summary>
    /// 当前流水号【需更新】 流水号当前值,如234表示当前的流水号生成到了234,下一个为234+STEP(步长)';
    /// </summary>
    public int CurrentValue { get; set; }
    
    }

    3.C#调用方法

    /// <summary>
    /// 不重复编码生成
    /// </summary>
    /// <param name="keyName"></param>
    /// <returns></returns>
    public string GetKeyCode(string keyName)
    {
    string returnKey = "";
    KeyCode key = _keyRepository.FirstOrDefault(k => k.KeyName == keyName);
    //步长
    int step = key.Step <= 0 ? 1 : key.Step;
    
    //如果日期格式化为空:表示编码不需要日期
    if (string.IsNullOrEmpty(key.DateFormat))
    key.NowDate = "";
    else
    key.NowDate = DateTime.Now.ToString(key.DateFormat);
    
    //重置类型: 0不重置,1重置
    //不重置:后面序号一直增加,不按年月日重置
    if (key.ReSetType == 0)
    key.CurrentValue = key.CurrentValue <= 0 ? 1 : (key.CurrentValue + step);
    //重置:年月日变化时,会重新从1开始
    else
    {
    //如果日期不一样了,序号从1开始
    if (!string.IsNullOrEmpty(key.NowDate) &&key.NowDate != DateTime.Now.ToString(key.DateFormat))
    key.CurrentValue = key.InitialValue <= 0 ? 0 : key.InitialValue;
    //否则,序号从原序号+step
    else
    key.CurrentValue = key.CurrentValue <= 0 ? 1 : (key.CurrentValue + step);
    }
    
    //更新当前值为新的值;
    _keyRepository.Update(key);
    //拼接编码
    string newCode = key.CurrentValue.ToString().PadLeft(key.Length, '0');
    returnKey = key.Prefix + key.NowDate + newCode;
    return returnKey;
    }
  • 相关阅读:
    Activiti工作流引擎简介
    关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化
    关于 sklearn.decomposition.KernelPCA的简单介绍
    numpy.mean和numpy.random.multivariate_normal(依据均值和协方差生成数据,提醒:计算协方差别忘了转置)
    没办法,SVD就讲的这么好
    SVD实例
    奇异值分解(SVD)实例,将不重要的特征值改为0,原X基本保持不变
    奇异值分解(SVD)详解
    numpy和matlab计算协方差矩阵的不同(matlab是标准的,numpy相当于转置后计算)
    特征值和特征向量的几何意义、计算及其性质(一个变换(或者说矩阵)的特征向量就是这样一种向量,它经过这种特定的变换后保持方向不变,只是进行长度上的伸缩而已)
  • 原文地址:https://www.cnblogs.com/xytmj/p/7606769.html
Copyright © 2011-2022 走看看