啊鑫
8 天以前 0aa54059b26e6641196e9953490dd18616e916e3
service/Warehouse/MesItemQtManager.cs
@@ -1,7 +1,9 @@
using NewPdaSqlServer.DB;
using System.Data;
using System.Data.SqlClient;
using Masuit.Tools;
using NewPdaSqlServer.DB;
using NewPdaSqlServer.Dto.service;
using NewPdaSqlServer.entity;
using NewPdaSqlServer.entity.Base;
using NewPdaSqlServer.util;
using SqlSugar;
@@ -14,17 +16,34 @@
    ///     获取未完成的退料单号列表
    /// </summary>
    /// <returns>退料单号列表</returns>
    public List<string> GetPendingQtList()
    public dynamic GetPendingQtList(dynamic RequestInfo)
    {
        const string sql = @"SELECT qtck
                        FROM MES_ITEM_QT
                        WHERE qt015 = 1
                          AND qt026 = 1
                          AND QT029 = 1
                          AND qt032 = 1
                          AND QT014 = 0  ";
        var orgId = RequestInfo.OrgId;
        return Db.Ado.SqlQuery<string>(sql);
        if (orgId == null)
            throw new Exception("组织不存在!");
        // 获取未完成的退料单号列表
        var parameters = new[]
        {
            new SugarParameter("@pi_orgId", orgId),
            new SugarParameter("@inP1", null),
            new SugarParameter("@inP2", null),
            new SugarParameter("@inP3", null),
            new SugarParameter("@inP4", null)
        };
        try
        {
            // 返回单号字符串列表
            var blDetails = Db.Ado.SqlQuery<string>(
                "EXEC prc_pda_qtck_list @pi_orgId,@inP1,@inP2,@inP3,@inP4",
                parameters);
            return blDetails;
        }
        catch (Exception ex)
        {
            throw new Exception($"{ex.Message}");
        }
    }
    /// <summary>
@@ -32,61 +51,49 @@
    /// </summary>
    /// <param name="query">仓库查询参数,包含用户名和单据号</param>
    /// <returns>待处理的退料单明细列表</returns>
    public ProductionPickDto GetPendingQtList(WarehouseQuery query)
    public dynamic GetPendingQtDetailList(dynamic query, dynamic RequestInfo)
    {
        // 从查询参数中获取用户名和单据号
        var c_User = query.userName;
        var p_bill_no = query.billNo;
        var orgId = RequestInfo.OrgId;
        // 根据单据号查询退料单主表信息
        var mesItemQt = Db.Queryable<MesItemQt>()
            .Where(it => it.Qtck == p_bill_no)
            .First();
        if (orgId == null)
            throw new Exception("组织不存在!");
        // 如果未找到退料单,抛出异常
        if (mesItemQt == null) throw new Exception($"未查询到此其他入库申请单 {p_bill_no}");
        //// 检查退料单的审核状态(Qt015),未审核则抛出异常
        //if (mesItemQt.Qt015 == false)
        //    throw new Exception($"其他出库申请单 {p_bill_no} 未审核,请确认!");
        // 检查退料单的完结状态(Qt014),已完结则抛出异常
        if (mesItemQt.Qt014 == true)
            throw new Exception($"其他出库申请单 {p_bill_no} 已完结,请确认!");
        var sql = @"SELECT c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel,
                    ISNULL(A.qd007,0)  FQty,ISNULL(A.qd008,0) SQty,ISNULL(A.qd007,0) - ISNULL(A.qd008,0) DSQty,
                    dbo.F_QX_GETRECODEPOTSE(A.itemId,'','','') as RecoKw
                    FROM MES_ITEM_QT_DATALL A
                    LEFT JOIN MES_ITEM_QT B ON A.qtGuid = B.guid
                    LEFT JOIN MES_ITEMS C ON A.itemId = C.item_id
                    WHERE B.qtck = @billNo AND (qt015 = 1 AND qt026 =1 AND QT029 = 1 AND qt032 = 1)";
        var sqlParams = new List<SugarParameter> {
            new("@billNo", query.billNo)
        };
        var womdabs = Db.Ado.SqlQuery<ItemDetailModel>(sql, sqlParams);
        // 检查退料单的完结状态(Qt014),已完结则抛出异常
        if (womdabs.Count < 1)
            throw new Exception($"该其他出库申请单 {p_bill_no} 未全部审核,请确认!");
        var DS_list = womdabs.Where(s => s.DSQty > 0).ToList();
        var YS_list = womdabs.Where(s => s.SQty > 0).ToList();
        var dto = new ProductionPickDto
        var parameters = new[]
        {
            //daa001 = womdaa.Daa001,
            //PlanNo = womcaa.Caa020,
            items = DS_list,
            Ysitems = YS_list
            new SugarParameter("@billNo", query.billNo),
            new SugarParameter("@pi_orgId", orgId),
            new SugarParameter("@inP1", null),
            new SugarParameter("@inP2", null),
            new SugarParameter("@inP3", null),
            new SugarParameter("@inP4", null)
        };
        return dto;
        try
        {
            var blDetails = Db.Ado.SqlQuery<dynamic>(
                "EXEC prc_pda_qtck_detailList @billNo,@pi_orgId,@inP1,@inP2,@inP3,@inP4",
                parameters);
            var items = blDetails.Where(x => x.DSQty > 0).ToList(); // 待扫物料
            var ysitems = blDetails.Where(x => x.SQty > 0).ToList(); // 已扫物料
            return new
            {
                items,
                ysitems,
                allList = blDetails
            };
        }
        catch (Exception ex)
        {
            // 保留原有异常处理逻辑
            throw new Exception($"{ex.Message}");
        }
    }
    /// <summary>
    ///     扫码出库
    /// </summary>
    /// <param name="query"></param>
    /// <returns></returns>
    /// <exception cref="Exception"></exception>
    public (WarehouseQuery form, List<MesItemQtDatall> item, string message)
        OutScanBarcode(
            WarehouseQuery query)
@@ -116,6 +123,7 @@
        if (barcode == null)
            throw new Exception($"mes中不存在此条码,请核对!{p_item_barcode}");
        // 获取库存信息
        var stock = Db.Queryable<MesInvItemStocks>()
            .Where(it => it.ItemBarcode == p_item_barcode && it.Quantity > 0)
@@ -143,16 +151,13 @@
        // 获取其他出库单信息
        var mesItemQt = Db.Queryable<MesItemQt>()
            .Where(it => it.Qtck == p_bill_no && it.Qt015 == true && it.Qt026 == true && it.Qt029 == true && it.Qt032 == true)
            .Where(it =>
                it.Qtck == p_bill_no && it.Qt015 == true && it.Qt026 == true &&
                it.Qt029 == true && it.Qt032 == true)
            .First();
        if (mesItemQt == null)
            throw new Exception($"其他出库申请单 {p_bill_no} 不存在,请确认!");
        // 检查仓库是否一致
        if (Convert.ToInt32(mesItemQt.Qt008)  != stock.DepotId)
            throw new Exception(
                $"扫码出货仓库id{mesItemQt.Qt008}与其他出库申请仓库{stock.DepotId}不一致,请核对!");
        // 获取出库单明细
        var qtDetail = Db.Queryable<MesItemQtDatall>()
@@ -163,6 +168,16 @@
        if (qtDetail == null) throw new Exception("扫码物料非本次出库申请物料,请核对!");
        if (mesItemQt.Qt014)
            throw new Exception($"其他出库申请单 {p_bill_no} 已完结,请确认!");
        // 检查仓库是否一致
        if (qtDetail.DepotId != stock.DepotId)
            throw new Exception(
                $"扫码出货仓库id{qtDetail.DepotId}与其他出库申请仓库{stock.DepotId}不一致,请核对!");
        // 检查剩余数量
        var remainingQty = (qtDetail.Qd007 ?? 0) - (qtDetail.Qd008 ?? 0);
        if (remainingQty <= 0)
@@ -172,8 +187,8 @@
        if (stock.Quantity > remainingQty)
        {
            var pendingList = Db
                .Queryable<MesItemQt, MesItemQtDatall, MesItems>(
                    (a, b, c) => new JoinQueryInfos(
                .Queryable<MesItemQt, MesItemQtDatall, MesItems>((a, b, c) =>
                    new JoinQueryInfos(
                        JoinType.Left, a.Guid == b.QtGuid,
                        JoinType.Left, b.ItemId == c.Id.ToString()))
                .Where((a, b, c) => a.Qtck == p_bill_no &&
@@ -191,6 +206,8 @@
            var message =
                $"请确认发料数量!!已带出满足其他出库单的发料数量 {remainingQty} 确认后请点击条码拆分";
            throw new Exception("条码数量超出发料数量,请拆分后再扫描!");
            query.itemNo = stock.ItemNo;
            query.Num = stock.Quantity;
@@ -278,7 +295,8 @@
            // 检查是否已存在出库物料记录
            var existingOutItem = Db.Queryable<MesInvItemOutItems>()
                .Where(it =>
                    it.ItemOutId == outId && it.ItemId == barcode.ItemId && it.ItemDabid == qtDetail.Guid)
                    it.ItemOutId == outId && it.ItemId == barcode.ItemId &&
                    it.ItemDabid == qtDetail.Guid)
                .First();
            if (existingOutItem == null)
@@ -320,7 +338,9 @@
                commit += db.Updateable<MesInvItemOutItems>()
                    .SetColumns(it =>
                        it.TlQty == (it.TlQty ?? 0) + stock.Quantity)
                    .Where(it => it.ItemOutId == outId && it.ItemId == barcode.ItemId && it.ItemDabid == qtDetail.Guid)
                    .Where(it =>
                        it.ItemOutId == outId && it.ItemId == barcode.ItemId &&
                        it.ItemDabid == qtDetail.Guid)
                    .ExecuteCommand();
            }
@@ -411,8 +431,8 @@
                    .ExecuteCommand();
            mesItemQtDatalls = Db
                .Queryable<MesItemQt, MesItemQtDatall, MesItems>(
                    (a, b, c) => new JoinQueryInfos(
                .Queryable<MesItemQt, MesItemQtDatall, MesItems>((a, b, c) =>
                    new JoinQueryInfos(
                        JoinType.Left, a.Guid == b.QtGuid,
                        JoinType.Left, b.ItemId == c.Id.ToString()))
                .Where((a, b, c) => a.Qtck == p_bill_no &&
@@ -445,8 +465,10 @@
            // 创建 插入日志
            var logService = new LogService();
            var LogMsg = "【PDA】其他出库。条码【" + query.barcode + "】数量【"+ stock.Quantity.ToString() + "】 出库单号【" + outNo + "】";
            logService.CreateLog(db, query.userName, mesItemQt.Guid.ToString(), "MES_ITEM_QT", LogMsg, mesItemQt.Qtck);
            var LogMsg = "【PDA】其他出库。条码【" + query.barcode + "】数量【" +
                         stock.Quantity + "】 出库单号【" + outNo + "】";
            logService.CreateLog(db, query.userName, mesItemQt.Guid.ToString(),
                "MES_ITEM_QT", LogMsg, mesItemQt.Qtck);
            if (commit < 5) throw new Exception("更新失败");
@@ -456,6 +478,12 @@
        return (query, mesItemQtDatalls, mess);
    }
    /// <summary>
    ///     拆分条码并出库
    /// </summary>
    /// <param name="query"></param>
    /// <returns></returns>
    /// <exception cref="Exception"></exception>
    public (WarehouseQuery form, List<MesItemQtDatall> item, string message)
        PrintQtckBarcode(
            WarehouseQuery query)
@@ -836,8 +864,8 @@
            // 获取剩余待处理明细
            mesItemQtDatalls = db
                .Queryable<MesItemQt, MesItemQtDatall, MesItems>(
                    (a, b, c) => new JoinQueryInfos(
                .Queryable<MesItemQt, MesItemQtDatall, MesItems>((a, b, c) =>
                    new JoinQueryInfos(
                        JoinType.Left, a.Guid == b.QtGuid,
                        JoinType.Left, b.ItemId == c.Id.ToString()))
                .Where((a, b, c) => a.Qtck == p_bill_no &&
@@ -859,4 +887,141 @@
        });
        return (query, mesItemQtDatalls, message);
    }
    /// <summary>
    ///     其他出库(新)存储过程
    /// </summary>
    /// <param name="query"></param>
    /// <returns></returns>
    /// <exception cref="Exception"></exception>
    public ProductionPickDto ScanCode(WarehouseQuery query)
    {
        var _strMsg = "";
        var _intSum = "";
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            if (query.userName.IsNullOrEmpty()) throw new Exception("用户名不允许为空");
            if (query.billNo.IsNullOrEmpty()) throw new Exception("申请单号不允许为空");
            if (query.barcode.IsNullOrEmpty()) throw new Exception("条码不允许为空");
            using (var cmd = new SqlCommand("[prc_pda_QTCK]", conn))
            {
                try
                {
                    conn.Open();
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter[] parameters =
                    {
                        new("@outMsg", SqlDbType.NVarChar, 300),
                        new("@outSum", SqlDbType.NVarChar, 300),
                        new("@barcode_num", SqlDbType.NVarChar, 300),
                        new("@split_num", SqlDbType.NVarChar, 300),
                        new("@c_User", query.userName),
                        new("@p_biLL_no", query.billNo),
                        new("@p_item_barcode", query.barcode)
                    };
                    parameters[0].Direction = ParameterDirection.Output;
                    parameters[1].Direction = ParameterDirection.Output;
                    parameters[2].Direction = ParameterDirection.Output;
                    parameters[3].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 barcodeNum = parameters[2].Value.ToString();
                    var splitNum = parameters[3].Value.ToString();
                    var result = Convert.ToInt32(_intSum);
                    if (result <= 0) throw new Exception(_strMsg);
                    var dto = new ProductionPickDto
                    {
                        daa001 = query.billNo,
                        barcodeNum = barcodeNum,
                        splitNum = splitNum,
                        barcode = query.barcode,
                        result = result.ToString()
                    };
                    return dto;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
    public ProductionPickDto ScanCodeCF(WarehouseQuery query)
    {
        if (query.userName.IsNullOrEmpty()) throw new Exception("用户名不允许为空");
        if (query.billNo.IsNullOrEmpty()) throw new Exception("申请单号不允许为空");
        if (query.barcode.IsNullOrEmpty()) throw new Exception("条码不允许为空");
        if (query.Num is null or 0) throw new Exception("条码拆分数不允许为空或者为0");
        var _strMsg = "";
        var _intSum = "";
        var _cfBar = ""; //拆分后条码
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            using (var cmd = new SqlCommand("[prc_pda_QTCK_CF]", conn))
            {
                try
                {
                    conn.Open();
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter[] parameters =
                    {
                        new("@outMsg", SqlDbType.NVarChar, 2000),
                        new("@outSum", SqlDbType.NVarChar, 300),
                        new("@outCfBar", SqlDbType.NVarChar, 300),
                        new("@c_User", query.userName),
                        new("@p_biLL_no", query.billNo),
                        new("@p_item_barcode", query.barcode),
                        new("@num", query.Num)
                    };
                    parameters[0].Direction = ParameterDirection.Output;
                    parameters[1].Direction = ParameterDirection.Output;
                    parameters[2].Direction = ParameterDirection.Output;
                    foreach (var parameter in parameters)
                        cmd.Parameters.Add(parameter);
                    cmd.ExecuteNonQuery();
                    _strMsg = parameters[0].Value.ToString();
                    _intSum = parameters[1].Value.ToString();
                    _cfBar = parameters[2].Value.ToString();
                    var result = Convert.ToInt32(_intSum);
                    if (result <= 0) throw new Exception(_strMsg);
                    var dto = new ProductionPickDto
                    {
                        daa001 = query.billNo,
                        barcode = query.barcode, //原条码
                        cfBarcode = _cfBar //拆分后条码
                    };
                    return dto;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
}