南骏 池
6 天以前 4910c0fa81d93635e19a57c073c3a62c76053320
service/Warehouse/InventoryManager.cs
@@ -4,6 +4,11 @@
using NewPdaSqlServer.service.@base;
using NewPdaSqlServer.util;
using SqlSugar;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Dynamic;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
namespace NewPdaSqlServer.service.Warehouse;
@@ -90,7 +95,7 @@
        // if (c_mes_inv_item_barcodes == null)
        //     throw new Exception("002[条码不存在,请核对!");
        if (c_mes_inv_item_barcodes.Memo != "期初")
        if (c_mes_inv_item_barcodes.Memo != "初期物料")
            throw new Exception("002[条码不是期初条码,无法用期初入库!");
        var wmsManager = new WmsBaseMangeer();
@@ -106,7 +111,7 @@
            transactionNo: "601" // 事务类型与存储过程匹配
        );
        
        if (checkResult.result < "1")
        if ( Convert.ToInt32(checkResult.result) < 1)
            throw new Exception($"入库校验失败:{checkResult.strMsg}");
        UseTransaction(db =>
@@ -268,4 +273,142 @@
        // 返回成功信息
        return query;
    }
    public dynamic GetDepoptsInfo(dynamic unity)
    {
        //// 使用参数化查询防止SQL注入
        var sqlParams = new List<SugarParameter> { new("@sectionCode", unity.sectionCode) };
        var sql2 = @"        SELECT TOP 1  B.depot_code + '('+B.depot_name+')' depotsInfo,
                     B.FSubsidiary,
                     C.FNumber + '('+C.NAME+')' orgInfo
        FROM MES_DEPOT_SECTIONS A
                 LEFT JOIN
             MES_DEPOTS B ON A.depot_guid = B.Guid
            LEFT JOIN SYS_ORGANIZATION C ON C.FID = B.FSubsidiary
        WHERE a.depot_section_code = @sectionCode;";
        var XcslItem = Db.Ado.SqlQuery<dynamic>(sql2, sqlParams).FirstOrDefault();
        // 检查结果有效性
        if (XcslItem == null)
        {
            throw new Exception($"库位 [{unity.sectionCode}] 不存在,或所属仓库状态异常(可能被禁用或删除)。");
        }
        return XcslItem; // 返回第一行数据,如果没有则返回 null
    }
    public dynamic GetItemsList(dynamic unity)
    {
        var sqlParams = new List<SugarParameter> { new("@orgId", unity.orgId) };
        var sql2 = new StringBuilder(@"
        SELECT TOP 20 item_id, item_no, item_name, item_model,item_no+'---'+item_name AS wlInfo
        FROM MES_ITEMS
        WHERE FSubsidiary = @orgId");
        if (!string.IsNullOrWhiteSpace(unity.selectKey?.ToString()))
        {
            sqlParams.Add(new("@selectKey", unity.selectKey));
            sql2.Append(@"
            AND (item_no LIKE '%' + @selectKey + '%'
            OR item_name LIKE '%' + @selectKey + '%'
            OR item_model LIKE '%' + @selectKey + '%')");
        }
        var XcslItem = Db.Ado.SqlQuery<dynamic>(sql2.ToString(), sqlParams);
        if (XcslItem == null)
        {
            throw new Exception("该条件下无对应物料信息,请重新输入!");
        }
        return XcslItem;
    }
    public List<dynamic> ExecuteBeginBar(dynamic query)
    {
        if (query == null)
            throw new ArgumentNullException(nameof(query), "参数对象不能为null");
        // 增强参数校验
        if (string.IsNullOrEmpty(query.userName?.ToString()))
            throw new ArgumentException("用户账号不能为空", nameof(query.userName));
        if (string.IsNullOrEmpty(query.itemid?.ToString()))
            throw new ArgumentException("物料ID不能为空", nameof(query.itemid));
        var resultList = new List<dynamic>();
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        using (var cmd = new SqlCommand("rpt_BeginBar", conn))
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddRange(new[]
            {
                new SqlParameter("@inUser", SqlDbType.NVarChar, 50) { Value = query.userName },
                new SqlParameter("@inItemId", SqlDbType.NVarChar, 50) { Value = query.itemid },
                new SqlParameter("@isDesign", SqlDbType.Int) { Value = 0 },
                new SqlParameter("@in4", SqlDbType.NVarChar, 20) { Value = query.in4 ?? DBNull.Value },
                new SqlParameter("@in5", SqlDbType.NVarChar, 20) { Value = query.num ?? DBNull.Value }
            });
            try
            {
                conn.Open();
                using (var reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        var barcode = reader.GetString(0);
                        // 构建符合方法签名的参数对象
                        var scanQuery = new WarehouseQuery
                        {
                            barcode = barcode,
                            DepotCode = query.sectionCode, // 从原始query获取库位编码
                            userName = query.userName // 从原始query获取用户账号
                        };
                        try
                        {
                            // 调用正式签名方法
                            ScanBarcode(scanQuery);
                            var printData = GetPrintBar(barcode);
                            resultList.Add(printData);
                        }
                        catch (Exception ex)
                        {
                            throw new Exception($"期初条码打印入库存在异常{ex.Message},请重新打印!");
                        }
                    }
                }
                return resultList;
            }
            catch (Exception ex)
            {
                throw new Exception($"生成期初条码失败:{ex.Message}");
            }
        }
    }
    public dynamic GetPrintBar(string barcode)
    {
        var sqlParams = new List<SugarParameter> { new("@barcode", barcode) };
        var sql1 = @"    SELECT TOP 1 C.ITEM_NO,C.item_name,C.item_model,B.OLDQTY as QUANTITY,B.CREATE_DATE, '期初条码' AS BarType,A.ITEM_BARCODE,GETDATE() as print_date
            FROM MES_INV_ITEM_STOCKS A
            LEFT JOIN MES_INV_ITEM_BARCODES B ON A.ITEM_BARCODE = B.ITEM_BARCODE
            LEFT JOIN MES_ITEMS C ON C.item_id = B.ITEM_ID
            WHERE B.ITEM_BARCODE = @barcode";
        var XcslItem = Db.Ado.SqlQuery<dynamic>(sql1, sqlParams).First();
        return XcslItem;
    }
}