啊鑫
8 天以前 0aa54059b26e6641196e9953490dd18616e916e3
service/base/WmsBaseMangeer.cs
@@ -1,150 +1,144 @@
namespace NewPdaSqlServer.service.@base
using System.Data;
using System.Data.SqlClient;
using NewPdaSqlServer.DB;
using NewPdaSqlServer.Dto.service;
using NewPdaSqlServer.entity;
using NewPdaSqlServer.util;
using SqlSugar;
namespace NewPdaSqlServer.service.@base;
public class WmsBaseMangeer : Repository<dynamic>
{
    using NewPdaSqlServer.Dto.service;
    using NewPdaSqlServer.entity;
    using SqlSugar;
    using System;
    using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
    using System.Data;
    using NewPdaSqlServer.DB;
    using System.Data;
    using System.Data.SqlClient;
    using Microsoft.EntityFrameworkCore.Metadata.Internal;
    public class WmsBaseMangeer : Repository<dynamic>
    /// <summary>
    ///     通用入库校验
    /// </summary>
    /// <param name="db">SqlSugar 数据库上下文</param>
    /// <param name="edtUserNo">操作人工号</param>
    /// <param name="barcode">物料条码</param>
    /// <param name="sectionCode">库位编码</param>
    /// <param name="stockId">仓库ID</param>
    /// <param name="stockOrgId">库存组织ID</param>
    /// <param name="billNo">申请单号</param>
    /// <param name="transactionNo">事务类型</param>
    /// <returns>包含校验结果的数据传输对象</returns>
    public dynamic pdaInvJY(SqlSugarScope db, string edtUserNo,
        string barcode, string sectionCode, string stockId, string stockOrgId,
        string billNo, string transactionNo)
    {
        var outputMsg = "";
        var outputStatus = -1;
        /// <summary>
        /// 通用入库校验
        /// </summary>
        /// <param name="db">SqlSugar 数据库上下文</param>
        /// <param name="edtUserNo">操作人工号</param>
        /// <param name="barcode">物料条码</param>
        /// <param name="sectionCode">库位编码</param>
        /// <param name="stockId">仓库ID</param>
        /// <param name="stockOrgId">库存组织ID</param>
        /// <param name="billNo">申请单号</param>
        /// <param name="transactionNo">事务类型</param>
        /// <returns>包含校验结果的数据传输对象</returns>
        public dynamic pdaInvJY(SqlSugarScope db, string edtUserNo,
            string barcode, string sectionCode, string stockId, string stockOrgId,
            string billNo, string transactionNo)
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        using (var cmd = new SqlCommand("prc_pda_inv_JY", conn))
        {
            var outputMsg = "";
            var outputStatus = -1;
            using (var conn = new SqlConnection(DbHelperSQL.strConn))
            using (var cmd = new SqlCommand("prc_pda_inv_JY", conn))
            cmd.CommandType = CommandType.StoredProcedure;
            // 输入参数配置
            SqlParameter[] parameters =
            {
                cmd.CommandType = CommandType.StoredProcedure;
                // 输入参数配置
                SqlParameter[] parameters =
                new("@pi_user", SqlDbType.NVarChar, 100) { Value = edtUserNo },
                new("@pi_barcode", SqlDbType.NVarChar, 100) { Value = barcode },
                new("@pi_sectionCode", SqlDbType.NVarChar, 100)
                    { Value = sectionCode },
                new("@pi_stockId", SqlDbType.NVarChar, 100) { Value = stockId },
                new("@pi_stockOrgId", SqlDbType.NVarChar, 100)
                    { Value = stockOrgId },
                new("@pi_billno", SqlDbType.NVarChar, 100) { Value = billNo },
                new("@pi_transaction_no", SqlDbType.NVarChar, 10)
                    { Value = transactionNo },
                new("@pi_val1", SqlDbType.NVarChar, 100)
                    { Value = DBNull.Value }, // 预留扩展字段
                new("@pi_val2", SqlDbType.NVarChar, 100)
                    { Value = DBNull.Value }, // 预留扩展字段
                new("@po_outMsg", SqlDbType.NVarChar, 2000)
                    { Direction = ParameterDirection.Output },
                new("@po_outStatus", SqlDbType.Int)
                    { Direction = ParameterDirection.Output }
            };
            try
            {
                conn.Open();
                cmd.Parameters.AddRange(parameters);
                cmd.ExecuteNonQuery();
                // 获取输出参数
                outputMsg = parameters[9].Value?.ToString() ?? "";
                outputStatus = Convert.ToInt32(parameters[10].Value);
                if (outputStatus <= 0)
                    throw new Exception(outputMsg);
                return new ProductionPickDto
                {
                    new("@pi_user", SqlDbType.NVarChar, 100) { Value = edtUserNo },
                    new("@pi_barcode", SqlDbType.NVarChar, 100) { Value = barcode },
                    new("@pi_sectionCode", SqlDbType.NVarChar, 100) { Value = sectionCode },
                    new("@pi_stockId", SqlDbType.NVarChar, 100) { Value = stockId },
                    new("@pi_stockOrgId", SqlDbType.NVarChar, 100) { Value = stockOrgId },
                    new("@pi_billno", SqlDbType.NVarChar, 100) { Value = billNo },
                    new("@pi_transaction_no", SqlDbType.NVarChar, 10) { Value = transactionNo },
                    new("@pi_val1", SqlDbType.NVarChar, 100) { Value = DBNull.Value }, // 预留扩展字段
                    new("@pi_val2", SqlDbType.NVarChar, 100) { Value = DBNull.Value }, // 预留扩展字段
                    new("@po_outMsg", SqlDbType.NVarChar, 2000) { Direction = ParameterDirection.Output },
                    new("@po_outStatus", SqlDbType.Int) { Direction = ParameterDirection.Output }
                    barcode = barcode,
                    strMsg = outputMsg,
                    result = outputStatus.ToString()
                    // 其他需要映射的字段...
                };
                try
                {
                    conn.Open();
                    cmd.Parameters.AddRange(parameters);
                    cmd.ExecuteNonQuery();
                    // 获取输出参数
                    outputMsg = parameters[9].Value?.ToString() ?? "";
                    outputStatus = Convert.ToInt32(parameters[10].Value);
                    if (outputStatus <= 0)
                        throw new Exception(outputMsg);
                    return new ProductionPickDto
                    {
                        barcode = barcode,
                        strMsg = outputMsg,
                        result = outputStatus.ToString(),
                        // 其他需要映射的字段...
                    };
                }
                catch (Exception ex)
                {
                    throw new Exception($"入库校验失败: {ex.Message}");
                }
            }
            catch (Exception ex)
            {
                throw new Exception($"入库校验失败: {ex.Message}");
            }
        }
    }
        /// <summary>
        /// 获取条码信息
        /// </summary>
        /// <param name="unity"></param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public MesInvItemBarcodes GetBarInfo(WarehouseQuery unity)
        {
            var barInfo = Db.Queryable<MesInvItemBarcodes>()
                .Where(s => s.ItemBarcode == unity.barcode)
                .First();
            if (barInfo is null) throw new Exception("该条码库存不存在!");
    /// <summary>
    ///     获取条码信息
    /// </summary>
    /// <param name="unity"></param>
    /// <returns></returns>
    /// <exception cref="Exception"></exception>
    public MesInvItemBarcodes GetBarInfo(WarehouseQuery unity)
    {
        var barInfo = Db.Queryable<MesInvItemBarcodes>()
            .Where(s => s.ItemBarcode == unity.barcode)
            .First();
        if (barInfo is null) throw new Exception("该条码库存不存在!");
            return barInfo; // 返回第一行数据,如果没有则返回 null
        }
        return barInfo; // 返回第一行数据,如果没有则返回 null
    }
        /// <summary>
        /// 获取物料信息
        /// </summary>
        /// <param name="strItemId"></param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        public MesItems GetItemNo(decimal strItemId)
        {
            var itemInfo = Db.Queryable<MesItems>()
                .Where(s => s.Id == strItemId && s.Fforbidstatus == "A")
                .First();
            if (itemInfo is null) throw new Exception("该条码对应物料信息不存在或已禁用!");
    /// <summary>
    ///     获取物料信息
    /// </summary>
    /// <param name="strItemId"></param>
    /// <returns></returns>
    /// <exception cref="Exception"></exception>
    public MesItems GetItemNo(decimal strItemId)
    {
        var itemInfo = Db.Queryable<MesItems>()
            .Where(s => s.Id == strItemId && s.Fforbidstatus == "A")
            .First();
        if (itemInfo is null) throw new Exception("该条码对应物料信息不存在或已禁用!");
            return itemInfo;
        }
        return itemInfo;
    }
        /// <summary>
        /// 获取货主类型
        /// </summary>
        /// <param name="ownerId">货主ID</param>
        /// <returns>货主类型(BD_OwnerOrg/BD_Customer/BD_Supplier)</returns>
        public string GetOwnerType(string ownerId)
        {
            if (string.IsNullOrEmpty(ownerId))
                throw new ArgumentNullException(nameof(ownerId));
    /// <summary>
    ///     获取货主类型
    /// </summary>
    /// <param name="ownerId">货主ID</param>
    /// <returns>货主类型(BD_OwnerOrg/BD_Customer/BD_Supplier)</returns>
    public string GetOwnerType(string ownerId)
    {
        if (string.IsNullOrEmpty(ownerId))
            throw new ArgumentNullException(nameof(ownerId));
            if (Db.Queryable<SysOrganization>().Any(x => x.Fid == ownerId))
            {
                return "BD_OwnerOrg";
            }
            else if (Db.Queryable<MesCustomer>().Any(x => x.Id == Convert.ToInt32(ownerId)))
            {
                return "BD_Customer";
            }
            else if (Db.Queryable<MesSupplier>().Any(x => x.Id == Convert.ToInt32(ownerId)))
            {
                return "BD_Supplier";
            }
            else if (Db.Queryable<SysOrganization>().Any(x => x.Fid == ownerId))
            {
                return "BD_OwnerOrg";
            }
            throw new Exception("无法确定货主类型,请检查货主ID是否正确!");
        }
        if (Db.Queryable<SysOrganization>().Any(x => x.Fid == ownerId))
            return "BD_OwnerOrg";
        if (Db.Queryable<MesCustomer>()
            .Any(x => x.Id == Convert.ToInt32(ownerId))) return "BD_Customer";
        if (Db.Queryable<MesSupplier>()
            .Any(x => x.Id == Convert.ToInt32(ownerId))) return "BD_Supplier";
        if (Db.Queryable<SysOrganization>().Any(x => x.Fid == ownerId))
            return "BD_OwnerOrg";
        throw new Exception("无法确定货主类型,请检查货主ID是否正确!");
    }
}