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 { public dynamic GetShdhItems(dynamic unity) { //// 使用参数化查询防止SQL注入 var sqlParams = new List { new("@shdh", unity.shdh) }; var sql1 = @"select 1 from DELIVERY_NOTICE WHERE delivery_no = @shdh "; var shdh = Db.Ado.SqlQuery(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(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(sql2, sqlParams); if (XcslItem.Count < 1) throw new Exception($"送货单号【{unity.shdh}】送货明细不存在或未同步!"); return XcslItem; // 返回第一行数据,如果没有则返回 null } public dynamic GetShdhBar(dynamic unity) { //// 使用参数化查询防止SQL注入 var sqlParams = new List { 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(sql2, sqlParams); if (XcslItem.Count < 1) throw new Exception($"送货单号【{unity.shdh}】条码明细不存在或未同步!"); return XcslItem; // 返回第一行数据,如果没有则返回 null } public MesInvItemBarcodes GetBarInfo(WarehouseQuery unity) { return Db.Queryable() .Where(s => s.ItemBarcode == unity.barcode) .First(); // 返回第一行数据,如果没有则返回 null } public MesItems GetItemNo(decimal strItemId) { return Db.Queryable() .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(); } } } } }