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
using System.Data;
using System.Data.SqlClient;
using Masuit.Tools;
using NewPdaSqlServer.DB;
using NewPdaSqlServer.Dto.service;
using NewPdaSqlServer.entity;
using SqlSugar;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
 
namespace NewPdaSqlServer.service.Warehouse;
 
public class MesXkyShdManager : Repository<MesCgthSq>
{
 
    public dynamic GetShdhItems(dynamic unity)
    {
        //// 使用参数化查询防止SQL注入
        var sqlParams = new List<SugarParameter> { new("@shdh", unity.shdh) };
 
        var sql1 = @"select 1 from DELIVERY_NOTICE WHERE delivery_no = @shdh ";
 
        var shdh = Db.Ado.SqlQuery<dynamic>(sql1, sqlParams);
        if (shdh.Count < 1)
            throw new Exception($"送货单号【{unity.shdh}】不存在或未同步!");
 
       // var sql3 = @"SELECT ISNULL((SELECT SUM(delivery_qty) FROM DELIVERY_NOTICE_DETAIL WHERE delivery_no = @shdh), 0) -
       //ISNULL((SELECT SUM(include_qty) FROM TBL_BARCODE_INFORMATION WHERE delivery_no = @shdh), 0) AS Diffnum ";
 
       // var diffNum = Db.Ado.SqlQuery<dynamic>(sql3, sqlParams).First();
 
       // if (diffNum.Diffnum != 0)
       //     throw new Exception($"送货单号【{unity.shdh}】条码未全部打印或未同步,无法收货!");
 
        var sql2 = @"select D.item_no,
       D.item_name,
       D.item_model,
       A.delivery_qty                         AS shsl,
       ISNULL(E.quantity, 0)                  as ysl,
       A.delivery_qty - ISNULL(E.quantity, 0) as dssl,
       A.po_erp_no,
       C.PURCHASE_ORDER_LINE_NUMBER,
       B.GUID AS DDHID
from DELIVERY_NOTICE_DETAIL A
         LEFT JOIN dbo.MES_INV_ITEM_ARN B on B.paper_bill_no = A.delivery_no
         LEFT JOIN MES_ROH_IN_DATA C ON A.po_line_no = C.EBELN_K3ID
         LEFT JOIN MES_ITEMS D ON C.ITEM_ID = D.item_id
         LEFT JOIN dbo.MES_INV_ITEM_ARN_DETAIL E on E.parent_Guid = B.guid AND E.line_k3id = A.po_line_no
WHERE A.delivery_no = @shdh";
 
        var XcslItem = Db.Ado.SqlQuery<dynamic>(sql2, sqlParams);
        if (XcslItem.Count < 1)
            throw new Exception($"送货单号【{unity.shdh}】送货明细不存在或未同步!");
 
        return XcslItem; // 返回第一行数据,如果没有则返回 null
    }
 
    public dynamic GetShdhBar(dynamic unity)
    {
 
        //// 使用参数化查询防止SQL注入
        var sqlParams = new List<SugarParameter> { new("@shdh", unity.shdh) };
 
        var sql2 = @"SELECT A.small_barcode,
        D.item_no,
       D.item_name,
       D.item_model,
       A.include_qty,
       A.po_erp_no,
       ISNULL(B.OLDQTY,0) AS ysl
FROM TBL_BARCODE_INFORMATION A
         LEFT JOIN MES_INV_ITEM_BARCODES B ON a.small_barcode = b.ITEM_BARCODE
         LEFT JOIN MES_ROH_IN_DATA C ON C.EBELN_K3ID = A.po_line_no
         LEFT JOIN MES_ITEMS D ON D.item_id = C.item_id
WHERE A.delivery_no =  @shdh";
 
        var XcslItem = Db.Ado.SqlQuery<dynamic>(sql2, sqlParams);
 
        if (XcslItem.Count < 1)
            throw new Exception($"送货单号【{unity.shdh}】条码明细不存在或未同步!");
 
        return XcslItem; // 返回第一行数据,如果没有则返回 null
    }
 
 
    public MesInvItemBarcodes GetBarInfo(WarehouseQuery unity)
    {
        return Db.Queryable<MesInvItemBarcodes>()
            .Where(s => s.ItemBarcode == unity.barcode)
            .First(); // 返回第一行数据,如果没有则返回 null
    }
 
    public MesItems GetItemNo(decimal strItemId)
    {
        return Db.Queryable<MesItems>()
            .Where(s => s.Id == strItemId)
            .First();
    }
 
    public string ScanBar(dynamic unity)
    {
        var _strMsg = "";
        var _intSum = "";
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            // 新增空对象校验
            if (unity == null) throw new ArgumentNullException(nameof(unity), "参数对象不能为 null");
            
            // 参数校验增强
            if (string.IsNullOrEmpty(unity.userName?.ToString()))
                throw new ArgumentException("用户账户不允许为空", nameof(unity.userName));
            
            if (string.IsNullOrEmpty(unity.shdh?.ToString()))
                throw new ArgumentException("送货单号不允许为空", nameof(unity.shdh));
 
            if (string.IsNullOrEmpty(unity.barcode?.ToString()))
                throw new ArgumentException("条码不允许为空", nameof(unity.barcode));
 
            using (var cmd = new SqlCommand("[prc_pda_inv_dhdsh]", conn))
            {
                try
                {
                    conn.Open();
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter[] parameters =
                    {
                        new("@po_outMsg", SqlDbType.NVarChar, 300) { Direction = ParameterDirection.Output },
                        new("@po_outSum", SqlDbType.NVarChar, 300) { Direction = ParameterDirection.Output },
                        new("@pi_user", SqlDbType.NVarChar) { Value = unity.userName.ToString() }, // 显式类型转换
                        new("@pi_barcode", SqlDbType.NVarChar) { Value = unity.barcode.ToString() },
                        new("@pi_shdh", SqlDbType.NVarChar) { Value = unity.shdh.ToString() }
                    };
                    parameters[0].Direction = ParameterDirection.Output;
                    parameters[1].Direction = ParameterDirection.Output;
 
                    foreach (var parameter in parameters)
                        cmd.Parameters.Add(parameter);
                    cmd.ExecuteNonQuery();
                    _strMsg = parameters[0].Value.ToString();
                    _intSum = parameters[1].Value.ToString();
 
                    var result = Convert.ToInt32(_intSum);
                    if (result <= 0) throw new Exception(_strMsg);
 
                    return _strMsg;
 
                    //return 0;
 
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
}