/// <summary>生成数字编码</summary>
        /// <param name="name">规则名称</param>
        /// <returns>数字编码</returns>
        public string Generate(string name)
        {
            string result = null;

            lock (lockObject)
            {
                DigitalNumberInfo param = FindOne(name);

                if (param == null)
                {
                    throw new Exception(string.Format("未找到相关配置信息,请联系管理员配置相关编号【{0}】参数信息。", name));
                }
                else
                {
                    int seed = param.Seed;

                    result = DigitalNumberScript.RunScript(param.Expression, param.ModifiedDate, ref seed);

                    param.Seed = seed;

                    // 忽略不需要自增的编号和更新时间的编号
                    if (!(DigitalNumberConfigurationView.Instance.IgnoreIncrementSeed.IndexOf(param.Name) > -1 || param.Seed == -1))
                    {
                        Save(param);
                    }

                    return(result);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>根据前缀生成数字编码</summary>
        /// <param name="entityTableName">实体数据表</param>
        /// <param name="prefixCode">前缀编号</param>
        /// <param name="expression">规则表达式</param>
        /// <returns>数字编码</returns>
        public string GenerateCodeByPrefixCode(string entityTableName, string prefixCode, string expression)
        {
            // 获取前缀
            string prefix = DigitalNumberScript.RunPrefixScript(expression, prefixCode.ToUpper(), DateTime.Now);

            // 根据前缀信息查询当前最大的编号
            Dictionary <string, object> args = new Dictionary <string, object>();

            args.Add("EntityTableName", entityTableName);
            args.Add("Prefix", prefix);

            int seed = Convert.ToInt32(this.ibatisMapper.QueryForObject(StringHelper.ToProcedurePrefix(string.Format("{0}_GetMaxSeedByPrefix", tableName)), args));

            return(DigitalNumberScript.RunScript(expression, prefixCode, DateTime.Now, ref seed));
        }
        public void TestRunScript()
        {
            string result = null;

            int seed = 0;

            seed = 99;

            result = DigitalNumberScript.RunScript("{dailyIncrement:seed:6}", new DateTime(2000, 1, 1), ref seed);

            Assert.AreEqual("000001", result);

            seed = 99;

            result = DigitalNumberScript.RunScript("{dailyIncrement:seed:6}", DateTime.Now, ref seed);

            Assert.AreEqual("000100", result);
        }