From 83d775ba1de1913e51fb216bc24d91305811f9bf Mon Sep 17 00:00:00 2001
From: YangYuGang <1378265336@qq.com>
Date: 星期一, 28 四月 2025 14:09:54 +0800
Subject: [PATCH] 收货单新增行库位修改

---
 Tiger.Business/DbCache/CodeRuleCache.cs |   46 +++++++++++++++++++++++++++++++++++-----------
 1 files changed, 35 insertions(+), 11 deletions(-)

diff --git a/Tiger.Business/DbCache/CodeRuleCache.cs b/Tiger.Business/DbCache/CodeRuleCache.cs
index 4ee42d4..b0a3693 100644
--- a/Tiger.Business/DbCache/CodeRuleCache.cs
+++ b/Tiger.Business/DbCache/CodeRuleCache.cs
@@ -4,6 +4,7 @@
 using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
+using System.Data;
 using System.Data.Entity;
 using System.Linq;
 using System.Text;
@@ -189,27 +190,39 @@
                     }
                     else
                     {
+                        next = serialGen.SERIAL_VALUE;
+                        //璺宠繃浠ヨ缃彿鐮佺粨灏剧殑娴佹按鍙�
+                        var ignoreList = (rule.SERIAL_IGNORE ?? "").Split(',', StringSplitOptions.RemoveEmptyEntries);
+                        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;
@@ -217,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;
                         }
@@ -247,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);
                     }
@@ -374,9 +387,20 @@
                     his.RULE_ID = rule.ID;
                     his.GEN_CODE = string.Concat(rule.Details.OrderBy(q => q.RULE_SEQ).Select(q => q.CodeValue));
                     his.GEN_DATE = DateTime.Now;
-                    Biz.Db.Insertable(his).ExecuteCommand();
+                    try
+                    {
+                    	Biz.Db.Insertable(his).ExecuteCommand();
+                    }
+                    catch (System.Exception ex)
+                    {
+                        throw new DataException(his.GEN_CODE, ex);
+                    }
                     result.Data = his.GEN_CODE;
                 }
+            }
+            catch (DataException ex)
+            {
+                result.CatchExceptionWithLog(ex.InnerException, Biz.L("BAS.CodeRule.GenerateSnHisException", ruleCode, ex.Message));
             }
             catch (System.Exception ex)
             {
@@ -404,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