From c7e7901305b9c2182a1faf52eb2bdc0481468e10 Mon Sep 17 00:00:00 2001 From: Rodney Chen <rodney.chen@hotmail.com> Date: 星期三, 28 八月 2024 21:23:42 +0800 Subject: [PATCH] 优化条码规则,增加固定值可以设置为不包含;增加流水号取号支持设置取号间隔和跳号规则 --- Tiger.Business/DbCache/Biz.CodeRule.cs | 16 ++++++++++++++-- Tiger.Business/DbCache/CodeRuleCache.cs | 32 ++++++++++++++++++++++---------- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/Tiger.Business/DbCache/Biz.CodeRule.cs b/Tiger.Business/DbCache/Biz.CodeRule.cs index f7206cd..b6c2ed3 100644 --- a/Tiger.Business/DbCache/Biz.CodeRule.cs +++ b/Tiger.Business/DbCache/Biz.CodeRule.cs @@ -95,9 +95,9 @@ /// <summary> /// 鏁版嵁搴撳叧鑱旈獙璇� /// </summary> - public static bool CheckDB(string key, BAS_CODE_DTL rule) + public static bool CheckDB(string key, BAS_CODE_DTL ruleDtl) { - return rule.DATA_TYPE == BAS_CODE_DTL.DATA_TYPEs.DbCheck.GetValue() ? Biz.Db.Queryable(rule.CHECK_TABLE, "t").Where($"{rule.CHECK_FIELD} = '{key}'").Any() : true; + return ruleDtl.DATA_TYPE == BAS_CODE_DTL.DATA_TYPEs.DbCheck.GetValue() ? Biz.Db.Queryable(ruleDtl.CHECK_TABLE, "t").Where($"{ruleDtl.CHECK_FIELD} = '{key}'").Any() : true; } /// <summary> @@ -123,7 +123,19 @@ //鍒ゆ柇娴佹按鍙锋槸鍚︾鍚堣鍒� if (IsMatch && item.DATA_TYPE == BAS_CODE_DTL.DATA_TYPEs.SerialCode.GetValue()) { + //鎸夊彇鍊艰寖鍥村垽鏂綋鍓嶆祦姘村彿鏄惁鍦ㄨ寖鍥村唴 IsMatch &= item.SERIAL_MIN <= item.CodeValue.ToInt32() && item.CodeValue.ToInt32() <= item.SERIAL_MAX; + //褰撳墠娴佹按鍙锋槸鍚︽寜璁剧疆闂撮殧鍥哄畾鏁板�� + IsMatch &= (item.CodeValue.ToInt32() - item.SERIAL_MIN) % item.SERIAL_INTERVAL == 0; + //鍒ゆ柇褰撳墠娴佹按鍙锋槸鍚﹁烦杩囦互璁剧疆鍙风爜缁撳熬鐨勬祦姘村彿 + if (!item.SERIAL_IGNORE.IsNullOrEmpty()) + { + var ignoreList = item.SERIAL_IGNORE.Split(','); + foreach (var num in ignoreList) + { + IsMatch &= !item.CodeValue.EndsWith(num); + } + } } } //鍒ゆ柇鍏宠仈瀛楁鏄惁绗﹀悎瑙勫垯 diff --git a/Tiger.Business/DbCache/CodeRuleCache.cs b/Tiger.Business/DbCache/CodeRuleCache.cs index ca64461..30b89eb 100644 --- a/Tiger.Business/DbCache/CodeRuleCache.cs +++ b/Tiger.Business/DbCache/CodeRuleCache.cs @@ -190,27 +190,39 @@ } else { + next = serialGen.SERIAL_VALUE; + //璺宠繃浠ヨ缃彿鐮佺粨灏剧殑娴佹按鍙� + var ignoreList = (rule.SERIAL_IGNORE ?? "").Split(','); + var isIgnore = false; + do + { + next += rule.SERIAL_INTERVAL; + foreach (var num in ignoreList) + { + isIgnore |= next.ToString().EndsWith(num); + } + } while (isIgnore && !ignoreList.IsNullOrEmpty()); //娴佹按鍙烽噸缃� switch (rule.SERIAL_RESET.GetEnum<BAS_CODE_DTL.SERIAL_RESETs>()) { case BAS_CODE_DTL.SERIAL_RESETs.Default: - if (serialGen.SERIAL_VALUE + 1 > rule.SERIAL_MAX) + if (next > rule.SERIAL_MAX) { - serialGen.SERIAL_VALUE = rule.SERIAL_MIN - 1; + next = rule.SERIAL_MIN; serialGen.SERIAL_DATE = DateTime.Now; } break; case BAS_CODE_DTL.SERIAL_RESETs.Year: if (serialGen.SERIAL_DATE.Year != DateTime.Now.Year) { - serialGen.SERIAL_VALUE = rule.SERIAL_MIN - 1; + next = rule.SERIAL_MIN; serialGen.SERIAL_DATE = DateTime.Now; } break; case BAS_CODE_DTL.SERIAL_RESETs.Month: if (serialGen.SERIAL_DATE.Month != DateTime.Now.Month) { - serialGen.SERIAL_VALUE = rule.SERIAL_MIN - 1; + next = rule.SERIAL_MIN; serialGen.SERIAL_DATE = DateTime.Now; } break; @@ -218,24 +230,25 @@ if ((serialGen.SERIAL_DATE.Date.DayOfWeek.GetValue() > 0 && DateTime.Now.Date.DayOfWeek.GetValue() == 0) || (DateTime.Now.Date - serialGen.SERIAL_DATE.Date).TotalDays >= 7) { - serialGen.SERIAL_VALUE = rule.SERIAL_MIN - 1; + next = rule.SERIAL_MIN; serialGen.SERIAL_DATE = DateTime.Now; } break; case BAS_CODE_DTL.SERIAL_RESETs.Day: if (serialGen.SERIAL_DATE.Date != DateTime.Now.Date) { - serialGen.SERIAL_VALUE = rule.SERIAL_MIN - 1; + next = rule.SERIAL_MIN; serialGen.SERIAL_DATE = DateTime.Now; } break; case BAS_CODE_DTL.SERIAL_RESETs.NotReset: break; } + //娴佹按鍙峰彇鍙� - if (serialGen.SERIAL_VALUE + 1 <= rule.SERIAL_MAX) + if (next <= rule.SERIAL_MAX) { - serialGen.SERIAL_VALUE++; + serialGen.SERIAL_VALUE = next; serialGen.LAST_GEN_DATE = DateTime.Now; serialGen.LAST_HIS_ID = hisID; } @@ -248,7 +261,6 @@ { db.Updateable(serialGen, "system").UpdateColumns(q => new { q.SERIAL_VALUE, q.SERIAL_DATE, q.LAST_GEN_DATE, q.LAST_HIS_ID }).ExecuteCommand(); } - next = serialGen.SERIAL_VALUE; //Debug.WriteLine($"{hisID}: {DateTime.Now:HH:mm:ss.fff} > 缁х画鍙栧彿鎴愬姛[{next}]锛屼紤鎭�1000ms"); //Thread.Sleep(1000); } @@ -416,8 +428,8 @@ } else { - var his = new BAS_CODE_HIS(); var argsIndex = 0; + var his = new BAS_CODE_HIS(); foreach (var item in rule.Details.OrderBy(q => q.RULE_SEQ)) { switch (item.DATA_TYPE.GetEnum<BAS_CODE_DTL.DATA_TYPEs>()) -- Gitblit v1.9.3