yl
2023-12-13 f330d41697dc8b2fbbd879ce8a9b644dab7cc31c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
using Dapper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using VueWebCoreApi.Models;
 
namespace VueWebCoreApi.Tools
{
    public class AppLableBarCode
    {
        public static ToMessage mes = new ToMessage(); //定义全局返回信息对象
 
        #region [获取规则编码]
        /// <summary>
        /// 根据功能编码获取最新规则编码
        /// </summary>
        /// <param name="rightcode">功能编码</param>
        /// <param name="partcode">物料编码</param>
        /// <param name="qty">数量</param>
        /// <param name="onelabqty">单标签数量</param>
        /// <returns></returns>
        public static ToMessage EncodingSeach(string rightcode, string partcode, string qty, string onelabqty)
        {
            string sql, year = "", month = "", day = "", fdate = "", q = "", cunm2 = "", Encode = "", cunm = "";
            int digit2 = 0, value2 = 0, digit3 = 0, digitdiff = 0;
            decimal labcum = 0;
            bool stf;
            List<object> list = new List<object>();
            List<string> listdt = new List<string>();
            List<AppLabCode> lab = new List<AppLabCode>();
            var dynamicParams = new DynamicParameters();
            //获取标签个数:进一法
            if (qty == "0" && onelabqty == "0")
            {
                labcum = 1;
            }
            else 
            {
                labcum = Math.Ceiling(decimal.Parse(qty) / decimal.Parse(onelabqty));
            }
            try
            {
                sql = @"select prefix,filingdate,incbit,value from  TCodeRules  where menucode=@menucode";
                dynamicParams.Add("@menucode", rightcode);
                var data = DapperHelper.selectdata(sql, dynamicParams);
                if (data.Rows.Count > 0)
                {
                    string prefix = data.Rows[0]["PREFIX"].ToString();  //固定字段
                    string filingdate = data.Rows[0]["FILINGDATE"].ToString();  //提交日期
                    int incbit = int.Parse(data.Rows[0]["INCBIT"].ToString());  //自增位数
                    string value = data.Rows[0]["VALUE"].ToString();  //流水号                                               
                    decimal sumqty = 0;//定义累计单标签数量
                    if (int.Parse(value) >= 0)
                    {
                        switch (filingdate)
                        {
                            case "年月日":
                                lab = Labcode(partcode, year, month, day, prefix, fdate, digit2, value2, digit3, digitdiff, q, cunm2, Encode, value, labcum, sumqty, onelabqty, rightcode, qty, out cunm);
                                break;
                            case "年月":
                                lab = Labcode(partcode, year, month, day, prefix, fdate, digit2, value2, digit3, digitdiff, q, cunm2, Encode, value, labcum, sumqty, onelabqty, rightcode, qty, out cunm);
                                break;
                            case "年":
                                lab = Labcode(partcode, year, month, day, prefix, fdate, digit2, value2, digit3, digitdiff, q, cunm2, Encode, value, labcum, sumqty, onelabqty, rightcode, qty, out cunm);
                                break;
                            default:
                                break;
                        }
                        //更新规则表位数及流水号
                        sql = @"update TCodeRules set incbit=@incbit,value=@cunm2  where menucode=@menucode";
                        dynamicParams.Add("@incbit", cunm.Length);
                        dynamicParams.Add("@cunm2", cunm);
                        dynamicParams.Add("@menucode", rightcode);
                        list.Add(new { str = sql, parm = dynamicParams });
                        stf = DapperHelper.DoTransaction(list);
                        if (stf)
                        {
                            mes.code = "200";
                            mes.message = "成功!";
                            mes.data = lab;
                        }
                        else
                        {
                            mes.code = "300";
                            mes.count = 0;
                            mes.message = "失败!";
                            mes.data = null;
                        }
                    }
                }
                else
                {
                    mes.code = "300";
                    mes.count = 0;
                    mes.message = "未设置编码规则,生成单号失败,请设置编码为【" + rightcode + "】的编码规则!";
                    mes.data = null;
                }
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
 
        #region[生成条码]
        /// <summary>
        /// 生成条码
        /// </summary>
        /// <param name="partcode">物料编码</param>
        /// <param name="year">年</param>
        /// <param name="month">月</param>
        /// <param name="day">日</param>
        /// <param name="prefix">固定字段</param>
        /// <param name="fdate">年(2位)+月(2位)+日(2位)</param>
        /// <param name="digit2">流水号长度</param>
        /// <param name="value2">自增流水号</param>
        /// <param name="digit3">自增流水号长度</param>
        /// <param name="digitdiff">位数差</param>
        /// <param name="q">补位(0)</param>
        /// <param name="cunm2">最终流水号(包含补位)</param>
        /// <param name="Encode">最终标签码(固定字段+规则+最终流水号)</param>
        /// <param name="value">初始查询最新流水号</param>
        /// <param name="labcum">标签个数</param>
        /// <param name="sumqty">累计单标签数量</param>
        /// <param name="onelabqty">单标签数量</param>
        /// <param name="rightcode">功能编码</param>
        /// <param name="qty">数量</param>
        /// <param name="cunm">输出最终流水号</param>
        /// <returns></returns>
        public static List<AppLabCode> Labcode(string partcode, string year, string month, string day, string prefix, string fdate, int digit2, int value2, int digit3, int digitdiff, string q, string cunm2, string Encode, string value, decimal labcum, decimal sumqty, string onelabqty, string rightcode, string qty, out string cunm)
        {
            List<AppLabCode> lab = new List<AppLabCode>();
            year = DateTime.Now.Year.ToString().Substring(2, 2);//获取年(2位)
            month = DateTime.Now.Month.ToString().PadLeft(2, '0');//获取月(2位)
            day = DateTime.Now.Day.ToString().PadLeft(2, '0');//获取日(2位)
            fdate = year + month + day;
 
            //获取查询流水号的位数
            digit2 = value.Length;//获取string类型位数  
            for (int i = 1; i <= labcum; i++)
            {
                AppLabCode lb = new AppLabCode();
                lb.rightcode = rightcode;
                if (i == labcum)  //最后一张标签
                {
                    lb.labqty = (decimal.Parse(qty) - sumqty).ToString(); //单标签数量
                }
                else
                {
                    lb.labqty = onelabqty; //单标签数量
                    sumqty += decimal.Parse(onelabqty);
                }
 
                //流水号循环自增
                value2 = int.Parse(value) + i;
                //获取自增后流水号位数
                digit3 = value2.ToString().Length;
                //获取位数之差
                digitdiff = digit2 - digit3;
                //重新获取流水号位数
                digit2 = digit3;
                q = "";
                if (digitdiff < 0) //位数差为负数需要进补位
                {
                    cunm2 = value2.ToString();//最终流水号
                }
                else
                {
                    for (int j = 1; j <= digitdiff; j++)
                    {
                        q = q + "0";
                    }
                    cunm2 = q + value2.ToString();//最终流水号
                }
                Encode = prefix + fdate + cunm2; //最终编码
                lb.labcode = Encode;
                lb.partnumber = partcode;
                lab.Add(lb);
            }
            cunm = cunm2;
            return lab;
        }
        #endregion
    }
}