/// <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); } } }
/// <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); }