啊鑫
2024-07-11 afbf8700d137710713db61955879d0f5acb73738
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
#region
 
using System.Data.Common;
using CSFramework.DB;
using CSFrameworkV5.Common;
 
///*************************************************************************/
///*
///* 文件名    :DocNoTool.cs                                
///* 程序说明  : 单据号码管理工具
///* 原创作者  :www.csframework.com 
///* 
///* Copyright 2006-2021 C/S框架网 www.csframework.com
///*
///**************************************************************************/
 
#endregion
 
namespace CSFrameworkV5.DataAccess
{
    /// <summary>
    ///     号码管理工具,支持生成序列号或指定规则的单据号码。
    /// </summary>
    public class DocNoTool
    {
        /// <summary>
        ///     在同一事务内生成流水号码,格式:XX00000001
        /// </summary>
        /// <param name="tran">当前事务</param>
        /// <param name="dataCode">字头</param>
        /// <param name="asHeader">当号码表没有该字头的定义,自动初始化一条序号为1的记录</param>
        /// <returns></returns>
        public static string GetDataSN(IDatabase db, DbTransaction tran,
            string dataCode, bool asHeader)
        {
            var cmd = db.CreateSqlProc("sp_sys_GetDataSN");
            cmd.AddParam("DataCode", dataCode);
            cmd.AddParam("AsHeader", asHeader ? "Y" : "N");
            cmd.Command.Connection = tran.Connection;
            cmd.Command.Transaction = tran;
            var no = db.ExecuteScalar(cmd.Command);
            return ConvertEx.ToString(no);
        }
 
        /// <summary>
        ///     生成流水号,格式:XX00000001
        /// </summary>
        /// <param name="conn">SQL连接</param>
        /// <param name="dataCode">字头</param>
        /// <param name="asHeader">当号码表没有该字头的定义,自动初始化一条序号为1的记录</param>
        /// <returns></returns>
        public static string GetDataSN(IDatabase db, string dataCode,
            bool asHeader)
        {
            var cmd = db.CreateSqlProc("sp_sys_GetDataSN");
            cmd.AddParam("DataCode", dataCode);
            cmd.AddParam("AsHeader", asHeader ? "Y" : "N");
            var no = db.ExecuteScalar(cmd.Command);
            return ConvertEx.ToString(no);
        }
 
        /// <summary>
        ///     在同一事务内生成流水号,格式:XX00000001
        /// </summary>
        /// <param name="tran">当前事务</param>
        /// <param name="dataCode">字头,如:XX</param>
        /// <param name="asHeader">True/False,当号码表没有该字头的定义,自动初始化一条序号为1的记录</param>
        /// <param name="asLength">数字序号的长度,如6位序号: 000001, 完整流水号+字头: XX000001</param>
        /// <returns></returns>
        public static string GetDataSN(IDatabase db, DbTransaction tran,
            string dataCode, bool asHeader, int asLength)
        {
            var cmd = db.CreateSqlProc("sp_sys_GetDataSN");
            cmd.AddParam("DataCode", dataCode);
            cmd.AddParam("AsHeader", asHeader ? "Y" : "N");
            cmd.AddParam("AsLength", asLength);
 
            cmd.Command.Connection = tran.Connection;
            cmd.Command.Transaction = tran;
 
            var no = db.ExecuteScalar(cmd.Command);
            return ConvertEx.ToString(no);
        }
 
        /// <summary>
        ///     获取单据的流水号码
        /// </summary>
        /// <param name="conn">当前SQL连接</param>
        /// <param name="DocNoName">单据名称,前缀,如:SO, AR,AP</param>
        /// <returns></returns>
        public static string GetDocNo(IDatabase db, string DocNoName)
        {
            var cmd = db.CreateSqlProc("sp_sys_GetDocNo");
            cmd.AddParam("DocCode", DocNoName);
            var no = db.ExecuteScalar(cmd.Command);
            return ConvertEx.ToString(no);
        }
 
        /// <summary>
        ///     在同一事务内生成单号,格式:XX20170228001
        /// </summary>
        /// <param name="tran">当前事务</param>
        /// <param name="DocNoName">单据名称,前缀,如:SO, AR,AP</param>
        /// <returns></returns>
        public static string GetNumber(IDatabase db, DbTransaction tran,
            string DocNoName)
        {
            var cmd = db.CreateSqlProc("sp_sys_GetDocNo");
            cmd.AddParam("DocCode", DocNoName);
            cmd.Command.Connection = tran.Connection;
            cmd.Command.Transaction = tran;
            var no = db.ExecuteScalar(cmd.Command);
            return ConvertEx.ToString(no);
        }
    }
}