章政 7 лет назад
Родитель
Сommit
c50a655a11
1 измененных файлов с 31 добавлено и 131 удалено
  1. 31 131
      UAS-出货标签管理/生成条码.cs

+ 31 - 131
UAS-出货标签管理/生成条码.cs

@@ -26,6 +26,8 @@ namespace UAS_LabelMachine
         Dictionary<string, string> NotPass = new Dictionary<string, string>();
         //前缀条件
         string Prefix = "";
+
+        string Suffix = "";
         //生成条码的流水号
         int serialnum = 0;
         //客户的流水号
@@ -102,7 +104,7 @@ namespace UAS_LabelMachine
             int SerialNumLength = 0;
             //存放键值对
             int Radix = 10;
-            Dictionary<int, string> NrDic = new Dictionary<int, string>();
+            string PrefixFixed = "";
             for (int m = 0; m < Nr.Rows.Count; m++)
             {
                 switch (Nr.Rows[m]["nrd_type"].ToString())
@@ -110,7 +112,8 @@ namespace UAS_LabelMachine
                     //常量直接进行拼接
                     case "常量":
                         NrData[m] = Nr.Rows[m]["nrd_sql"].ToString();
-                        NrDic.Add(m, NrData[m]);
+                        Prefix += NrData[m];
+                        Suffix += NrData[m];
                         break;
                     case "SQL":
                         string SQL = Nr.Rows[m]["nrd_sql"].ToString();
@@ -132,18 +135,21 @@ namespace UAS_LabelMachine
                         if (Temp.Rows.Count > 0)
                         {
                             NrData[m] = Temp.Rows[0][0].ToString();
-                            NrDic.Add(m, NrData[m]);
+                            Prefix += NrData[m];
+                            Suffix += NrData[m];
                         }
                         else
                         {
                             NrData[m] = "";
-                            NrDic.Add(m, NrData[m]);
+                            Prefix += NrData[m];
+                            Suffix += NrData[m];
                         }
                         break;
                     //流水需要通过MaxNumber去取
                     case "流水":
                         NrData[m] = dh.getFieldDataByCondition("RuleMaxNum", "rmn_maxnumber", "rmn_nrcode='" + CustCode + "'").ToString();
-                        NrDic.Add(m, NrData[m]);
+                        Suffix ="";
+                        PrefixFixed = Prefix;
                         //设置当前流水
                         custserialnum = int.Parse(NrData[m] == "" ? "0" : NrData[m]);
                         SerialNumIndex = m;
@@ -154,31 +160,18 @@ namespace UAS_LabelMachine
                         break;
                 }
             }
-            Prefix = "";
-            for (int i = 0; i < NrDic.Count; i++)
+            //获取最大的流水号
+            string maxnum = dh.getFieldDataByCondition("RuleMaxNum", "rmn_maxnumber", "rmn_nrcode='" + NrCode + "' and rmn_prefix='" + Prefix + "'").ToString();
+            //如果流水号为空则插入一条新记录,从1开始取
+            if (maxnum == "")
             {
-                //如果不是流水则正常添加
-                if (i != SerialNumIndex)
-                {
-                    Prefix += NrDic[i];
-                }
-                else
-                {
-                    //获取最大的流水号
-                    string maxnum = dh.getFieldDataByCondition("RuleMaxNum", "rmn_maxnumber", "rmn_nrcode='" + NrCode + "' and rmn_prefix='" + Prefix + "'").ToString();
-                    //如果流水号为空则插入一条新记录,从1开始取
-                    if (maxnum == "")
-                    {
-                        dh.ExecuteSql("insert into RuleMaxNum(rmn_id,rmn_nrcode,rmn_prefix,rmn_maxnumber) values(RuleMaxNum_seq.nextval,'" + NrCode + "','" + Prefix + "','1')", "insert");
-                        custserialnum = 1;
-                    }
-                    //如果流水号不为空则取当前流水
-                    else
-                    {
-                        custserialnum = int.Parse(maxnum);
-                    }
-                    break;
-                }
+                dh.ExecuteSql("insert into RuleMaxNum(rmn_id,rmn_nrcode,rmn_prefix,rmn_maxnumber) values(RuleMaxNum_seq.nextval,'" + NrCode + "','" + Prefix + "','1')", "insert");
+                custserialnum = 1;
+            }
+            //如果流水号不为空则取当前流水
+            else
+            {
+                custserialnum = int.Parse(maxnum);
             }
             //有错误需要提醒的内容
             int CheckedRowCount = 0;
@@ -244,7 +237,7 @@ namespace UAS_LabelMachine
                         {
                             //将箱号添加进List
                             barcode.Add(BarcodeMethod1(pd_id, pr_id, pib_barcode));
-                            custbarcode.Add(BarcodeMethod1(NrDic, SerialNumIndex, SerialNumLength, Radix));
+                            custbarcode.Add(BarcodeMethod1(PrefixFixed, Suffix, SerialNumIndex, SerialNumLength, Radix));
                             midcode.Add(mid_code);
                             if (mid_remain % pr_zxbzs != 0 && k + 1 == count && j + 1 == mid_num)
                                 AddNum = mid_remain % pr_zxbzs;
@@ -322,27 +315,17 @@ namespace UAS_LabelMachine
         }
 
         //生成客户条码
-        public string BarcodeMethod1(Dictionary<int, string> Dic, int Index, int Length, int radix)
+        public string BarcodeMethod1(string Prefix,string Suffix,int Index, int Length, int radix)
         {
-            string str = "";
-            for (int i = 0; i < Dic.Count; i++)
+            string str = Prefix;
+            //如果是流水则需要在前面加0
+            string serialcode = BaseUtil.DToAny(custserialnum, radix);
+            for (int j = serialcode.ToString().Length; j < Length; j++)
             {
-                //如果不是流水则正常添加
-                if (i != Index)
-                {
-                    str += Dic[i];
-                }
-                else
-                {
-                    //如果是流水则需要在前面加0
-                    string serialcode = BaseUtil.DToAny(custserialnum, radix);
-                    for (int j = serialcode.ToString().Length; j < Length; j++)
-                    {
-                        serialcode = "0" + serialcode;
-                    }
-                    str += serialcode;
-                }
+                serialcode = "0" + serialcode;
             }
+            str += serialcode;
+            str += Suffix;
             custserialnum = custserialnum + 1;
             return str;
         }
@@ -461,89 +444,6 @@ namespace UAS_LabelMachine
             //用于过滤参数的正则表达式
             Regex match = new Regex("{\\w+}");
             //用于存放每一项的明细的数据
-            string[] NrData = new string[Nr.Rows.Count];
-            //流水号的索引
-            int SerialNumIndex = 0;
-            //流水长度
-            int SerialNumLength = 0;
-            //存放键值对
-            Dictionary<int, string> NrDic = new Dictionary<int, string>();
-            for (int m = 0; m < Nr.Rows.Count; m++)
-            {
-                switch (Nr.Rows[m]["nrd_type"].ToString())
-                {
-                    //常量直接进行拼接
-                    case "常量":
-                        NrData[m] = Nr.Rows[m]["nrd_sql"].ToString();
-                        NrDic.Add(m, NrData[m]);
-                        break;
-                    case "SQL":
-                        string SQL = Nr.Rows[m]["nrd_sql"].ToString();
-                        DataTable Temp;
-                        //如果不包含参数替换
-                        if (SQL.IndexOf("{") == 0)
-                        {
-                            Temp = (DataTable)dh.ExecuteSql(SQL, "select");
-                        }
-                        else
-                        {
-                            //替换参数后重新执行SQL
-                            foreach (Match mch in match.Matches(SQL))
-                            {
-                                SQL = SQL.Replace(mch.Value.Trim(), "'" + pi_inoutno.Text + "'");
-                            }
-                            Temp = (DataTable)dh.ExecuteSql(SQL, "select");
-                        }
-                        if (Temp.Rows.Count > 0)
-                        {
-                            NrData[m] = Temp.Rows[0][0].ToString();
-                            NrDic.Add(m, NrData[m]);
-                        }
-                        else
-                        {
-                            NrDic.Add(m, "");
-                        }
-                        break;
-                    //流水需要通过MaxNumber去取
-                    case "流水":
-                        NrData[m] = dh.getFieldDataByCondition("RuleMaxNum", "rmn_maxnumber", "rmn_nrcode='" + NrCode + "'").ToString();
-                        NrDic.Add(m, NrData[m]);
-                        //设置当前流水
-                        custserialnum = int.Parse(NrData[m] == "" ? "0" : NrData[m]);
-                        SerialNumIndex = m;
-                        SerialNumLength = int.Parse(Nr.Rows[m]["nrd_length"].ToString());
-                        break;
-                    default:
-                        break;
-                }
-            }
-            //流水前的前缀,查询RuleMaxNum表看是否有对应的MaxNumber记录,如果有则取MaxNumber,没有的话则进行插入
-            Prefix = "";
-            for (int i = 0; i < NrDic.Count; i++)
-            {
-                //如果不是流水则正常添加
-                if (i != SerialNumIndex)
-                {
-                    Prefix += NrDic[i];
-                }
-                else
-                {
-                    //获取最大的流水号
-                    string maxnum = dh.getFieldDataByCondition("RuleMaxNum", "rmn_maxnumber", "rmn_nrcode='" + NrCode + "' and rmn_prefix='" + Prefix + "'").ToString();
-                    //如果流水号为空则插入一条新记录,从1开始取
-                    if (maxnum == "")
-                    {
-                        dh.ExecuteSql("insert into RuleMaxNum(rmn_id,rmn_nrcode,rmn_prefix,rmn_maxnumber) values(RuleMaxNum_seq.nextval,'" + NrCode + "','" + Prefix + "','1')", "insert");
-                        custserialnum = 1;
-                    }
-                    //如果流水号不为空则取当前流水
-                    else
-                    {
-                        custserialnum = int.Parse(maxnum);
-                    }
-                    break;
-                }
-            }
             dt = (DataTable)dh.ExecuteSql("select pi_class,pi_id from prodinout where pi_inoutno='" + pi_inoutno.Text + "'", "select");
             if (dt.Rows.Count > 0)
             {