cnf
2025-08-14 43021e27282a22f25b51d499333e73225266e9c3
领料模块
已修改4个文件
已添加3个文件
2619 ■■■■■ 文件已修改
Controllers/Warehouse/TransferOutController.cs 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Controllers/Wom/WomdaahbController.cs 587 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Dto/service/ProductionPickDto.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
entity/Womdaahb.cs 422 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/Warehouse/MesItemBlManager.cs 114 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/Warehouse/TransferOutManager.cs 355 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/Wom/WomdaahbManager.cs 1090 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Controllers/Warehouse/TransferOutController.cs
@@ -1,6 +1,7 @@
using System.Dynamic;
using Microsoft.AspNetCore.Mvc;
using NewPdaSqlServer.Dto.service;
using NewPdaSqlServer.service.@base;
using NewPdaSqlServer.service.Warehouse;
using NewPdaSqlServer.util;
@@ -14,6 +15,8 @@
public class TransferOutController : ControllerBase
{
    private readonly TransferOutManager _manager = new();
    private readonly MesPrintMangeer _mCf = new();
    #region åŸºç¡€CRUD
@@ -166,6 +169,30 @@
        }
    }
    [HttpPost("GetTransferInDetailListByBillNo")]
    public ResponseResult GetTransferInDetailListByBillNo(
    [FromBody] WarehouseQuery query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList =
                _manager.GetTransferInDetailListByBillNo(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     æ‰«ææ¡ç è¿›è¡Œè°ƒæ‹¨å‡ºåº“处理
    /// </summary>
@@ -197,9 +224,16 @@
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var (form, items) = _manager.ScanMoveBarcode(query);
            resultInfos.form = form;
            resultInfos.items = items;
            resultInfos.tbBillList = _manager.ScanMoveBarcode(query);
            if (resultInfos.tbBillList.result == "2")
            {
                return new ResponseResult
                {
                    status = Convert.ToInt32(resultInfos.tbBillList.result),
                    message = resultInfos.tbBillList.strMsg,
                    data = resultInfos
                };
            }
            return new ResponseResult
            {
                status = 0,
@@ -236,14 +270,16 @@
    /// </remarks>
    /// <response code="200">分割成功</response>
    /// <response code="400">分割失败,返回具体错误信息</response>
    [HttpPost("SplitBarcode")]
    public ResponseResult SplitBarcode([FromBody] WarehouseQuery query)
    [HttpPost("ScanCodeCF")]
    public ResponseResult ScanCodeCF(WarehouseQuery query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var message = _manager.SplitBarcode(query);
            resultInfos.tbBillList = message;
            resultInfos.tbBillList = new ExpandoObject();
            resultInfos.tbBillList.printInfo = _mCf.getPrintInfo(query);
            var scanResult = _manager.ScanCodeCF(query);
            resultInfos.tbBillList.cfBarInfo = _mCf.getCfInfo(scanResult);
            return new ResponseResult
            {
                status = 0,
Controllers/Wom/WomdaahbController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,587 @@
using System.Dynamic;
using Microsoft.AspNetCore.Mvc;
using NewPdaSqlServer.Dto.service;
using NewPdaSqlServer.entity;
using NewPdaSqlServer.service.@base;
using NewPdaSqlServer.service.Wom;
using NewPdaSqlServer.util;
namespace NewPdaSqlServer.Controllers.Wom;
[ApiController]
[Route("api/[controller]")]
public class WomdaaController : ControllerBase
{
    private readonly WomdaaManager m = new();
    private readonly MesPrintMangeer _mCf = new();
    #region ç”Ÿäº§é¢†æ–™
    //GetProductionPickDaa001
    /// <summary>
    ///     æ¨¡ç³ŠæŸ¥è¯¢å·¥å•号并返回
    /// </summary>
    /// <returns></returns>
    [HttpPost("GetProductionPickDaa001")]
    public ResponseResult GetProductionPickDaa001(WarehouseQuery query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.GetProductionPickDaa001(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    //GetItemsByDaa001
    /// <summary>
    ///     æ ¹æ®å·¥å•号获取代领物料明细
    /// </summary>
    /// <returns></returns>
    [HttpPost("GetItemsByDaa001")]
    public ResponseResult GetItemsByDaa001(WarehouseQuery query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.GetItemsByDaa001(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    //ScanCode
    [HttpPost("ScanCode")]
    public ResponseResult ScanCode(WarehouseQuery query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.ScanCode(query);
            if(resultInfos.tbBillList.result == "2")
            {
                return new ResponseResult
                {
                    status = Convert.ToInt32(resultInfos.tbBillList.result),
                    message = resultInfos.tbBillList.strMsg,
                    data = resultInfos
                };
            }
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    //ScanCodeCF
    [HttpPost("ScanCodeCF")]
    public ResponseResult ScanCodeCF(WarehouseQuery query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = new ExpandoObject();
            //resultInfos.tbBillList.printInfo = _mCf.getPrintInfo(query);
            var scanResult = m.ScanCodeCF(query);
            resultInfos.tbBillList.cfBarInfo = _mCf.getCfInfo(scanResult);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     èŽ·å–æ‰€æœ‰
    /// </summary>
    /// <returns></returns>
    [HttpPost("GetList")]
    public ResponseResult GetList()
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.GetList();
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     æ ¹æ®ä¸»é”®èŽ·å–
    /// </summary>
    /// <returns></returns>
    [HttpPost("GetById")]
    public ResponseResult GetById(int id)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.GetById(id);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     æ ¹æ®ä¸»é”®åˆ é™¤
    /// </summary>
    /// <returns></returns>
    [HttpPost("DeleteByIds")]
    public ResponseResult DeleteByIds([FromBody] object[] ids)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.DeleteByIds(ids);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     æ·»åŠ 
    /// </summary>
    /// <returns></returns>
    [HttpPost("Insert")]
    public ResponseResult Add([FromBody] Womdaa data)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.Insert(data);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     æ·»åŠ è¿”å›žè‡ªå¢ž
    /// </summary>
    /// <returns></returns>
    [HttpPost("InsertReturnIdentity")]
    public ResponseResult InsertReturnIdentity([FromBody] Womdaa data)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.InsertReturnIdentity(data);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     ä¿®æ”¹
    /// </summary>
    /// <returns></returns>
    [HttpPost("Update")]
    public ResponseResult Update([FromBody] Womdaa data)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.Update(data);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    #endregion
    #region çŽ°åœºç®¡ç†
    /// <summary>
    ///     æ‰«ææ³¨å¡‘码,获取工单和条码信息
    /// </summary>
    /// <returns></returns>
    [HttpPost("getZsBarInfo")]
    public ResponseResult getZsBarInfo([FromBody] dynamic query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            // å…ˆåˆå§‹åŒ–tbBillList属性
            resultInfos.tbBillList = new ExpandoObject();
            resultInfos.tbBillList.ZsBarInfo = m.getZsBarInfo(query);
            resultInfos.tbBillList.Traceability = m.getTraceability(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     äº§å“ç»‘定,追溯码和流水码绑定
    /// </summary>
    /// <returns></returns>
    [HttpPost("ProductBinding")]
    public ResponseResult ProductBinding([FromBody] dynamic query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            // å…ˆåˆå§‹åŒ–tbBillList属性
            resultInfos.tbBillList = new ExpandoObject();
            resultInfos.tbBillList = m.ProductBinding(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     èŽ·å–å¡æ¿ä¿¡æ¯
    /// </summary>
    /// <returns></returns>
    [HttpPost("getKbBarInfo")]
    public ResponseResult getKbBarInfo([FromBody] dynamic query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            // å…ˆåˆå§‹åŒ–tbBillList属性
            resultInfos.tbBillList = new ExpandoObject();
            resultInfos.tbBillList.KbBarInfo = m.getKbBarInfo(query);
            resultInfos.tbBillList.KbBarMxInfo = m.getKbBarMxInfo(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     èŽ·å–ç®±ç ä¿¡æ¯
    /// </summary>
    /// <returns></returns>
    [HttpPost("getXBarInfo")]
    public ResponseResult getXBarInfo([FromBody] dynamic query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            // å…ˆåˆå§‹åŒ–tbBillList属性
            resultInfos.tbBillList = new ExpandoObject();
            resultInfos.tbBillList.XBarInfo = m.getXBarInfo(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     ç»‘定箱码与托板码
    /// </summary>
    /// <returns></returns>
    [HttpPost("submitAllChecked")]
    public ResponseResult submitAllChecked([FromBody] dynamic query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            // å…ˆåˆå§‹åŒ–tbBillList属性
            resultInfos.tbBillList = new ExpandoObject();
            resultInfos.tbBillList = m.submitAllChecked(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     æ ¸å¯¹é€æ£€
    /// </summary>
    /// <returns></returns>
    [HttpPost("submitInspection")]
    public ResponseResult submitInspection([FromBody] dynamic query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            // å…ˆåˆå§‹åŒ–tbBillList属性
            resultInfos.tbBillList = new ExpandoObject();
            resultInfos.tbBillList = m.SubmitKbInspection(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    //GetItemsXcsl
    /// <summary>
    ///     æ ¹æ®å·¥å•号获取待收料物料明细
    /// </summary>
    /// <returns></returns>
    [HttpPost("GetItemsXcsl")]
    public ResponseResult GetItemsXcsl(WarehouseQuery query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.GetItemsXcsl(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    //GetItemsXcsl
    /// <summary>
    ///     ç‰©æ–™æ¡ç æ”¶æ–™
    /// </summary>
    /// <returns></returns>
    [HttpPost("ScanXcsl")]
    public ResponseResult ScanXcsl(dynamic query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.ScanXcsl(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    //GetItemsXcsl
    /// <summary>
    ///     æ ¹æ®çº¿ä½“获取仪器重量
    /// </summary>
    /// <returns></returns>
    [HttpPost("GetWeightByXt")]
    public ResponseResult GetWeightByXt(dynamic query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.GetWeightByXt(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    /// çŽ°åœºæ”¶æ–™èŽ·å–å¯é€‰å·¥å•ä¿¡æ¯
    /// </summary>
    /// <param name="query"></param>
    /// <returns></returns>
    [HttpPost("GetXcslDaa")]
    public ResponseResult GetXcslDaa([FromBody] dynamic query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.GetXcslDaa(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    //GetItemsXctl
    /// <summary>
    ///     æ ¹æ®å·¥å•号获取待投料物料明细
    /// </summary>
    /// <returns></returns>
    [HttpPost("GetItemsXctl")]
    public ResponseResult GetItemsXctl(WarehouseQuery query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.GetItemsXctl(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    //GetItemsXcsl
    /// <summary>
    ///     ç‰©æ–™æ¡ç æŠ•æ–™
    /// </summary>
    /// <returns></returns>
    [HttpPost("ScanXctl")]
    public ResponseResult ScanXctl(dynamic query)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.ScanXctl(query);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    #endregion
}
Dto/service/ProductionPickDto.cs
@@ -6,6 +6,7 @@
public class ProductionPickDto
{
    public string? ItemModel { get; set; }
    public string? itemNo { get; set; }
    public string? PlanNo { get; set; }
    public string? daa001 { get; set; }
entity/Womdaahb.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,422 @@
using SqlSugar;
namespace NewPdaSqlServer.entity;
/// <summary>
/// </summary>
[SugarTable("WOMDAAHB")]
public class Womdaahb
{
    /// <summary>
    ///     é»˜è®¤å€¼: (newid())
    /// </summary>
    [SugarColumn(ColumnName = "guid", IsPrimaryKey = true)]
    public Guid Guid { get; set; }
    /// <summary>
    /// </summary>
    [SugarColumn(ColumnName = "pbaGuid")]
    public Guid? PbaGuid { get; set; }
    /// <summary>
    /// </summary>
    [SugarColumn(ColumnName = "caaGuid")]
    public Guid? CaaGuid { get; set; }
    ///// <summary>
    /////     è‡ªå¢žåˆ—
    ///// </summary>
    //[SugarColumn(ColumnName = "id")]
    //public int? Id { get; set; }
    ///// <summary>
    /////     æŽ’产ID
    ///// </summary>
    //[SugarColumn(ColumnName = "pid")]
    //public int? Pid { get; set; }
    /// <summary>
    ///     å•号
    /// </summary>
    [SugarColumn(ColumnName = "daa001")]
    public string? Daa001 { get; set; }
    /// <summary>
    ///     äº§å“ID
    /// </summary>
    [SugarColumn(ColumnName = "daa002")]
    public string? Daa002 { get; set; }
    /// <summary>
    ///     äº§å“åç§°
    /// </summary>
    [SugarColumn(ColumnName = "daa003")]
    public string? Daa003 { get; set; }
    /// <summary>
    ///     äº§å“è§„æ ¼
    /// </summary>
    [SugarColumn(ColumnName = "daa004")]
    public string? Daa004 { get; set; }
    /// <summary>
    ///     å•位
    /// </summary>
    [SugarColumn(ColumnName = "daa005")]
    public string? Daa005 { get; set; }
    /// <summary>
    ///     ERP预计开工时间
    /// </summary>
    [SugarColumn(ColumnName = "daa006")]
    public DateTime? Daa006 { get; set; }
    /// <summary>
    ///     ERP预计完工时间
    /// </summary>
    [SugarColumn(ColumnName = "daa007")]
    public DateTime? Daa007 { get; set; }
    /// <summary>
    ///     å·¥å•数量
    /// </summary>
    [SugarColumn(ColumnName = "daa008")]
    public int? Daa008 { get; set; }
    /// <summary>
    ///     å¤‡æ³¨
    /// </summary>
    [SugarColumn(ColumnName = "daa009")]
    public string? Daa009 { get; set; }
    /// <summary>
    ///     å…¥åº“数量
    /// </summary>
    [SugarColumn(ColumnName = "daa010")]
    public int? Daa010 { get; set; }
    /// <summary>
    ///     å·²ç”Ÿäº§é‡
    /// </summary>
    [SugarColumn(ColumnName = "daa011")]
    public int? Daa011 { get; set; }
    /// <summary>
    ///     æŠ¥åºŸæ•°é‡
    /// </summary>
    [SugarColumn(ColumnName = "daa012")]
    public int? Daa012 { get; set; }
    /// <summary>
    ///     å·¥ä½œè½¦é—´
    /// </summary>
    [SugarColumn(ColumnName = "daa013")]
    public string? Daa013 { get; set; }
    /// <summary>
    ///     æŠ•料单单号
    /// </summary>
    [SugarColumn(ColumnName = "daa014")]
    public string? Daa014 { get; set; }
    /// <summary>
    ///     ç”Ÿäº§çº¿åˆ«
    /// </summary>
    [SugarColumn(ColumnName = "daa015")]
    public string? Daa015 { get; set; }
    /// <summary>
    ///     å®žé™…开工日
    /// </summary>
    [SugarColumn(ColumnName = "daa016")]
    public DateTime? Daa016 { get; set; }
    /// <summary>
    ///     å®žé™…完工日
    /// </summary>
    [SugarColumn(ColumnName = "daa017")]
    public DateTime? Daa017 { get; set; }
    /// <summary>
    ///     å·¥å•状态
    /// </summary>
    [SugarColumn(ColumnName = "daa018")]
    public string? Daa018 { get; set; }
    /// <summary>
    ///     é½å¥—状态
    /// </summary>
    [SugarColumn(ColumnName = "daa019")]
    public string? Daa019 { get; set; }
    /// <summary>
    ///     å®¡æ ¸ç 
    /// </summary>
    [SugarColumn(ColumnName = "fstatus")]
    public int? Fstatus { get; set; }
    /// <summary>
    ///     å®¡æ ¸æ—¥æœŸ
    /// </summary>
    [SugarColumn(ColumnName = "check_date")]
    public DateTime? CheckDate { get; set; }
    /// <summary>
    ///     å®¡æ ¸äºº
    /// </summary>
    [SugarColumn(ColumnName = "check_user")]
    public string? CheckUser { get; set; }
    /// <summary>
    ///     çº¿åˆ«ç¼–码
    /// </summary>
    [SugarColumn(ColumnName = "daa020")]
    public string? Daa020 { get; set; }
    /// <summary>
    ///     ä»»åŠ¡å•å•å·
    /// </summary>
    [SugarColumn(ColumnName = "daa021")]
    public string? Daa021 { get; set; }
    /// <summary>
    ///     é€šçŸ¥å¤‡æ–™ï¼Œ0-未通知,1-通知
    ///     é»˜è®¤å€¼: ((0))
    /// </summary>
    [SugarColumn(ColumnName = "daa022")]
    public int? Daa022 { get; set; }
    /// <summary>
    ///     ç”Ÿäº§åºå·
    /// </summary>
    [SugarColumn(ColumnName = "daa023")]
    public int? Daa023 { get; set; }
    /// <summary>
    ///     æŽ’产日期
    /// </summary>
    [SugarColumn(ColumnName = "daa024")]
    public string? Daa024 { get; set; }
    /// <summary>
    ///     é¦–件是否检验1-检验,0未检验
    /// </summary>
    [SugarColumn(ColumnName = "daa025")]
    public string? Daa025 { get; set; }
    /// <summary>
    ///     é¦–件检验结果
    /// </summary>
    [SugarColumn(ColumnName = "daa026")]
    public string? Daa026 { get; set; }
    /// <summary>
    ///     å·²æŠ¥æ£€ï¼Œ0-未报检,1-已报检
    /// </summary>
    [SugarColumn(ColumnName = "is_reportcheck")]
    public int? IsReportcheck { get; set; }
    /// <summary>
    ///     æŠ¥æ£€äºº
    /// </summary>
    [SugarColumn(ColumnName = "usname")]
    public string? Usname { get; set; }
    /// <summary>
    ///     æŠ¥æ£€æ—¶é—´
    /// </summary>
    [SugarColumn(ColumnName = "reporttime")]
    public DateTime? Reporttime { get; set; }
    /// <summary>
    ///     æœºå°ç¼–号
    /// </summary>
    [SugarColumn(ColumnName = "machine_no")]
    public string? MachineNo { get; set; }
    /// <summary>
    ///     å¤‡æ–™å®Œæˆ1-完成,0未完成
    /// </summary>
    [SugarColumn(ColumnName = "daa027")]
    public int? Daa027 { get; set; }
    /// <summary>
    ///     å¤‡æ–™å®Œæˆæ—¶é—´
    /// </summary>
    [SugarColumn(ColumnName = "daa028")]
    public string? Daa028 { get; set; }
    /// <summary>
    ///     æ ‡å‡†å·¥æ—¶
    /// </summary>
    [SugarColumn(ColumnName = "prod_hour")]
    public int? ProdHour { get; set; }
    /// <summary>
    ///     å•人小时产能
    /// </summary>
    [SugarColumn(ColumnName = "person_hour_capacity")]
    public int? PersonHourCapacity { get; set; }
    /// <summary>
    ///     ç†è®ºæ ‡äº§
    /// </summary>
    [SugarColumn(ColumnName = "the_capacity")]
    public int? TheCapacity { get; set; }
    /// <summary>
    ///     è®¡åˆ’用人数
    /// </summary>
    [SugarColumn(ColumnName = "plan_personnel")]
    public int? PlanPersonnel { get; set; }
    /// <summary>
    ///     è®¡åˆ’标准产能
    /// </summary>
    [SugarColumn(ColumnName = "plan_capacity")]
    public int? PlanCapacity { get; set; }
    /// <summary>
    ///     ç†è®ºç”¨æ—¶/M
    /// </summary>
    [SugarColumn(ColumnName = "the_min")]
    public int? TheMin { get; set; }
    /// <summary>
    ///     ç†è®ºç”¨æ—¶/H
    /// </summary>
    [SugarColumn(ColumnName = "the_hour")]
    public int? TheHour { get; set; }
    /// <summary>
    ///     çº¿ä½“类别
    /// </summary>
    [SugarColumn(ColumnName = "line_type")]
    public string? LineType { get; set; }
    /// <summary>
    ///     æ ‡å‡†äººæ•°
    /// </summary>
    [SugarColumn(ColumnName = "personnel")]
    public int? Personnel { get; set; }
    /// <summary>
    ///     æ¢çº¿æ—¶é—´
    /// </summary>
    [SugarColumn(ColumnName = "change_line_time")]
    public int? ChangeLineTime { get; set; }
    /// <summary>
    ///     ä¼‘息时间
    /// </summary>
    [SugarColumn(ColumnName = "rest_time")]
    public int? RestTime { get; set; }
    /// <summary>
    ///     æŽ’产序号
    /// </summary>
    [SugarColumn(ColumnName = "schedule_order")]
    public int? ScheduleOrder { get; set; }
    /// <summary>
    ///     MES预计开工时间
    /// </summary>
    [SugarColumn(ColumnName = "mes_start_prod")]
    public DateTime? MesStartProd { get; set; }
    /// <summary>
    ///     MES预计完工时间
    /// </summary>
    [SugarColumn(ColumnName = "mes_end_prod")]
    public DateTime? MesEndProd { get; set; }
    /// <summary>
    ///     æŽ’产推送标识
    /// </summary>
    [SugarColumn(ColumnName = "prodts")]
    public int? Prodts { get; set; }
    /// <summary>
    ///     é¢„计备料时间
    /// </summary>
    [SugarColumn(ColumnName = "prepare_time")]
    public DateTime? PrepareTime { get; set; }
    /// <summary>
    ///     æ’件投入人数
    /// </summary>
    [SugarColumn(ColumnName = "cj_worker")]
    public int? CjWorker { get; set; }
    /// <summary>
    ///     æ’件计划投入人数
    /// </summary>
    [SugarColumn(ColumnName = "p_cj_worker")]
    public int? PCjWorker { get; set; }
    /// <summary>
    ///     æ’件日产量
    /// </summary>
    [SugarColumn(ColumnName = "cj_daily_out")]
    public int? CjDailyOut { get; set; }
    /// <summary>
    ///     æ’件标准工时
    /// </summary>
    [SugarColumn(ColumnName = "cj_std_hour")]
    public int? CjStdHour { get; set; }
    /// <summary>
    ///     é”¡ç„ŠæŠ•å…¥äººæ•°
    /// </summary>
    [SugarColumn(ColumnName = "hx_worker")]
    public int? HxWorker { get; set; }
    /// <summary>
    ///     é”¡ç„Šè®¡åˆ’投入人数
    /// </summary>
    [SugarColumn(ColumnName = "p_hx_worker")]
    public int? PHxWorker { get; set; }
    /// <summary>
    ///     é”¡ç„Šæ—¥äº§é‡
    /// </summary>
    [SugarColumn(ColumnName = "hx_daily_out")]
    public int? HxDailyOut { get; set; }
    /// <summary>
    ///     é”¡ç„Šæ ‡å‡†å·¥æ—¶
    /// </summary>
    [SugarColumn(ColumnName = "hx_std_hour")]
    public int? HxStdHour { get; set; }
    /// <summary>
    ///     æ’件数量
    /// </summary>
    [SugarColumn(ColumnName = "cj_num")]
    public int? CjNum { get; set; }
    /// <summary>
    ///     å®¢æˆ·
    /// </summary>
    [SugarColumn(ColumnName = "cust")]
    public string? Cust { get; set; }
    /// <summary>
    ///     æ˜¯å¦é¦–检
    /// </summary>
    [SugarColumn(ColumnName = "IS_SJ")]
    public int? IsSj { get; set; }
    /// <summary>
    ///     äº§å“ç¼–码
    /// </summary>
    [SugarColumn(ColumnName = "daa029")]
    public string? Daa029 { get; set; }
    /// <summary>
    ///     å®žé™…线体编码
    /// </summary>
    [SugarColumn(ColumnName = "sj_xt")]
    public string? SjXt { get; set; }
}
service/Warehouse/MesItemBlManager.cs
@@ -132,29 +132,36 @@
        try
        {
            // è°ƒç”¨å­˜å‚¨è¿‡ç¨‹
            var parameters = new List<SqlParameter>
    {
        new SqlParameter("@c_user", query.userName),
        new SqlParameter("@p_bill_no", query.billNo ?? string.Empty),
        new SqlParameter("@p_item_barcode", query.barcode),
        new SqlParameter("@p_bl_no", query.blNo),
        new SqlParameter("@p_type", query.Type),
        new SqlParameter("@outMsg", SqlDbType.NVarChar, 2000) { Direction = ParameterDirection.Output },
        new SqlParameter("@outSum", SqlDbType.Int) { Direction = ParameterDirection.Output },
        new SqlParameter("@barcode_num", SqlDbType.Decimal) { Direction = ParameterDirection.Output },
        new SqlParameter("@split_num", SqlDbType.Decimal) { Direction = ParameterDirection.Output }
    };
            var parameters = new SqlParameter[]
            {
    new SqlParameter("@C_USER", SqlDbType.NVarChar, 100) { Value = query.userName ?? string.Empty },
    new SqlParameter("@P_BILL_NO", SqlDbType.NVarChar, 50) { Value = query.billNo ?? string.Empty },
    new SqlParameter("@P_ITEM_BARCODE", SqlDbType.NVarChar, 100) { Value = query.barcode ?? string.Empty },
    new SqlParameter("@P_BL_NO", SqlDbType.NVarChar, 100) { Value = query.blNo ?? string.Empty },
    new SqlParameter("@P_TYPE", SqlDbType.NVarChar, 20) { Value = query.Type ?? string.Empty },
    new SqlParameter("@OUT_MSG", SqlDbType.NVarChar, 2000) { Direction = ParameterDirection.Output },
    new SqlParameter("@OUT_SUM", SqlDbType.Int) { Direction = ParameterDirection.Output },
    new SqlParameter("@BARCODE_NUM", SqlDbType.Decimal) {
        Direction = ParameterDirection.Output,
        Precision = 18,
        Scale = 10
    },
    new SqlParameter("@SPLIT_NUM", SqlDbType.Decimal) {
        Direction = ParameterDirection.Output,
        Precision = 18,
        Scale = 10
    }
            };
            // æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
            Db.Ado.ExecuteCommand(
                "EXEC PRC_PDA_SCBLCL @c_user, @p_bill_no, @p_item_barcode, @p_bl_no, @p_type, @outMsg OUTPUT, @outSum OUTPUT, @barcode_num OUTPUT, @split_num OUTPUT",
                parameters.ToArray());
            string procedureName = "PRC_PDA_SCBLCL";
            int res = DbHelperSQL.RunProcedure_NonQuery(procedureName, parameters);
            // èŽ·å–è¾“å‡ºå‚æ•°
            outMsg = parameters[5].Value?.ToString() ?? "";
            outSum = Convert.ToInt32(parameters[6].Value);
            barcodeNum = Convert.ToDecimal(parameters[7].Value);
            splitNum = Convert.ToDecimal(parameters[8].Value);
            outSum = parameters[6].Value as int? ?? 0;  // é»˜è®¤å€¼æ ¹æ®éœ€æ±‚调整
            barcodeNum = parameters[7].Value as decimal? ?? 0m;
            splitNum = parameters[8].Value as decimal? ?? 0m;
            // å¤„理存储过程返回的结果
            if (outSum == 2) // éœ€è¦æ‹†åˆ†
@@ -598,7 +605,7 @@
        WarehouseQuery query)
    {
        // è¾“入参数验证(保持不变)
        // Validate input parameters
        if (string.IsNullOrEmpty(query.userName))
            throw new Exception("用户名不能为空!");
@@ -614,47 +621,41 @@
        if (string.IsNullOrEmpty(query.blNo))
            throw new Exception("补料单号不能为空!");
        // å‡†å¤‡å­˜å‚¨è¿‡ç¨‹å‚æ•°
        var outMsg = "";
        var outSum = -1;
        var outCfBar = "";
        // Prepare parameters for the stored procedure
        var parameters = new List<SugarParameter>
{
    new SugarParameter("@C_USER", query.userName),
    new SugarParameter("@P_BILL_NO", query.billNo),
    new SugarParameter("@P_ITEM_BARCODE", query.barcode),
    new SugarParameter("@P_BL_NO", query.blNo),
    new SugarParameter("@P_TYPE", query.Type),
    new SugarParameter("@NUM", query.Num),
    new SugarParameter("@OUT_MSG", "", System.Data.DbType.String, ParameterDirection.Output),
    new SugarParameter("@OUT_SUM", 0, System.Data.DbType.Int32, ParameterDirection.Output),
    new SugarParameter("@OUT_CF_BAR", "", System.Data.DbType.String, ParameterDirection.Output)
};
        try
        // Execute the stored procedure
        Db.Ado.UseStoredProcedure().ExecuteCommand("PRC_PDA_SCBLCL_CF", parameters);
        // Get output parameters
        var outMsg = parameters.FirstOrDefault(p => p.ParameterName == "@OUT_MSG")?.Value?.ToString();
        var outSum = Convert.ToInt32(parameters.FirstOrDefault(p => p.ParameterName == "@OUT_SUM")?.Value ?? -1);
        var outCfBar = parameters.FirstOrDefault(p => p.ParameterName == "@OUT_CF_BAR")?.Value?.ToString();
        // Handle the result
        if (outSum == -1)
        {
            // è°ƒç”¨å­˜å‚¨è¿‡ç¨‹
            var parameters = new List<SugarParameter>
    {
        new SugarParameter("@C_USER", query.userName),               // æ“ä½œäººå‘˜
        new SugarParameter("@P_BILL_NO", query.billNo),            // å·¥å•号
        new SugarParameter("@P_ITEM_BARCODE", query.barcode),      // æ¡ç 
        new SugarParameter("@P_BL_NO", query.blNo),                // è¡¥æ–™å•号
        new SugarParameter("@P_TYPE", query.Type),                 // ç±»åž‹(生产补料/生产超领)
        new SugarParameter("@NUM", query.Num),                     // æ‹†åˆ†æ•°
        new SugarParameter("@OUT_MSG", null, true),                // è¾“出消息
        new SugarParameter("@OUT_SUM", null, true),                // æ‰§è¡Œç»“æžœ(1成功,-1失败)
        new SugarParameter("@OUT_CF_BAR", null, true)              // è¾“出新条码编号
    };
            // æ‰§è¡Œå­˜å‚¨è¿‡ç¨‹
            Db.Ado.UseStoredProcedure().ExecuteCommand("PRC_PDA_SCBLCL_CF", parameters);
            // èŽ·å–è¾“å‡ºå‚æ•°
            outMsg = parameters.First(p => p.ParameterName == "@OUT_MSG").Value?.ToString();
            outSum = Convert.ToInt32(parameters.First(p => p.ParameterName == "@OUT_SUM").Value);
            outCfBar = parameters.First(p => p.ParameterName == "@OUT_CF_BAR").Value?.ToString();
            // å¤„理存储过程返回结果
            if (outSum != 1)
            {
                throw new Exception(outMsg ?? "操作失败");
            }
        }
        catch (Exception ex)
        {
            throw new Exception(outMsg ?? ex.Message);
            throw new Exception(outMsg ?? "操作失败");
        }
        // èŽ·å–å¾…å‘æ–™æ˜Žç»†åˆ—è¡¨ï¼ˆä¿æŒä¸å˜ï¼‰
        if (outSum == 2)
        {
            // Handle case where barcode needs to be split
            // You might want to return the new barcode to the client
        }
        // Get pending list for the supplement order
        var pendingList = Db.Queryable<MesItemBl, MesItemBlDetail>((a, b) =>
                new JoinQueryInfos(JoinType.Left, a.Id == b.Mid))
            .Where((a, b) => a.BlNo == query.blNo
@@ -670,7 +671,6 @@
            })
            .ToList();
        // è¿”回结果(成功状态和待发料列表)
        return (outSum == 1, pendingList);
        //if (string.IsNullOrEmpty(query.userName))
service/Warehouse/TransferOutManager.cs
@@ -42,6 +42,7 @@
        // æ ¹æ®pid查询对应的出库单号
        var billNos = Db.Queryable<MesDbck>()
            .Where(x => result.Contains(x.Id) && x.FApproveStatus == 1)
            .OrderBy(x => x.FCreateDate)
            .Select(x => x.FBillNo)
            .ToList();
@@ -53,41 +54,144 @@
    /// </summary>
    /// <param name="query">查询参数,包含单据号</param>
    /// <returns>待处理的调拨出库明细列表</returns>
    public List<ItemDetailModel> GetTransferOutDetailListByBillNo(
    public ProductionPickDto GetTransferOutDetailListByBillNo(
        WarehouseQuery query)
    {
        var p_bill_no = query.billNo;
        if (string.IsNullOrEmpty(query.billNo)) throw new Exception("调拨单号为空");
        // æ ¹æ®SQL查询条件获取待处理的出库明细
        // å…³è”查询TransferOutDetail、TransferOut和MesItems三张表
        // ç­›é€‰æ¡ä»¶:未完成数量大于0且单据已审核
        var result = Db.Queryable<MesDbckDetail, MesDbck, MesItems>(
                (b, a, s) => new JoinQueryInfos(
                    JoinType.Left, b.Pid == a.Id,
                    JoinType.Left, b.FMaterialId == s.Id.ToString()))
            .Where((b, a, s) =>
                !((b.FQty ?? 0) == (b.SQty ?? 0) && (b.FQty ?? 0) == (b.RQty ?? 0))
                && a.FBillNo == p_bill_no // åŒ¹é…å•据号
                && a.FApproveStatus == 1) // å•据已审核
            .OrderBy((b, a, s) => s.ItemNo)
            .Select((b, a, s) => new ItemDetailModel
            {
                ItemNo = s.ItemNo,
                ItemName = s.ItemName,
                ItemModel = s.ItemModel,
                FQty = b.FQty, // ç”³è¯·æ•°é‡
                SQty = b.SQty, // å·²æ‰«æ•°é‡
                RQty = b.RQty, // å·²æ‰«æ•°é‡
                // ä¿ç•™å…¶ä»–必要字段...
                Pid = b.Pid.ToString(),
                FMaterialId = b.FMaterialId,
                Id = b.Id.ToString()
            })
            .ToList();
        var sql1 = string.Format(@"SELECT * FROM MES_DBCK WHERE FDocumentStatus = 'C' AND FBillNo = '{0}'", query.billNo);
        if(result.Count < 1) throw new Exception("该调拨单不存在或已扫完,请重新扫描");
        var dbck = Db.Ado.SqlQuery<ItemDetailModel>(sql1);
        return result;
        if (dbck.Count < 1) throw new Exception("调拨单号不存在或未审核!");
        var sql2 = string.Format(@"SELECT c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel,b.FQty FQty,b.SQty SQty,b.FQty - b.SQty DSQty ,
       dbo.F_QX_GETRECODEPOTSE(B.FMATERIALID,'','','') as RecoKw
    FROM MES_DBCK_DETAIL B
    LEFT JOIN MES_DBCK A ON A.ID = B.pid
    LEFT JOIN MES_ITEMS C ON  B.FMATERIALID = C.item_id
    LEFT JOIN WOMCAB D ON B.erpid = D.ERPID
    WHERE A.FBillNo = '{0}'  ORDER BY FSEQ", query.billNo);
        var womdabs = Db.Ado.SqlQuery<ItemDetailModel>(sql2);
        var DS_list = womdabs.Where(s => s.DSQty > 0).ToList();
        var YS_list = womdabs.Where(s => s.SQty > 0).ToList();
        //var p_bill_no = query.billNo;
        //// æ ¹æ®SQL查询条件获取待处理的出库明细
        //// å…³è”查询TransferOutDetail、TransferOut和MesItems三张表
        //// ç­›é€‰æ¡ä»¶:未完成数量大于0且单据已审核
        //var result = Db.Queryable<MesDbckDetail, MesDbck, MesItems>(
        //        (b, a, s) => new JoinQueryInfos(
        //            JoinType.Left, b.Pid == a.Id,
        //            JoinType.Left, b.FMaterialId == s.Id.ToString()))
        //    .Where((b, a, s) =>
        //        !((b.FQty ?? 0) == (b.SQty ?? 0) && (b.FQty ?? 0) == (b.RQty ?? 0))
        //        && a.FBillNo == p_bill_no // åŒ¹é…å•据号
        //        && a.FApproveStatus == 1) // å•据已审核
        //    .OrderBy((b, a, s) => s.ItemNo)
        //    .Select((b, a, s) => new ItemDetailModel
        //    {
        //        ItemNo = s.ItemNo,
        //        ItemName = s.ItemName,
        //        ItemModel = s.ItemModel,
        //        FQty = b.FQty, // ç”³è¯·æ•°é‡
        //        SQty = b.SQty, // å·²æ‰«æ•°é‡
        //        RQty = b.RQty, // å·²æ‰«æ•°é‡
        //        // ä¿ç•™å…¶ä»–必要字段...
        //        Pid = b.Pid.ToString(),
        //        FMaterialId = b.FMaterialId,
        //        Id = b.Id.ToString()
        //    })
        //    .ToList();
        //if(result.Count < 1) throw new Exception("该调拨单不存在或已扫完,请重新扫描");
        var dto = new ProductionPickDto
        {
            items = DS_list,
            Ysitems = YS_list
            // yisao = mesInvItemOutCDetailsList
        };
        return dto;
    }
    /// <summary>
    ///     æ ¹æ®å•据号获取待处理的调拨出库明细列表
    /// </summary>
    /// <param name="query">查询参数,包含单据号</param>
    /// <returns>待处理的调拨出库明细列表</returns>
    public ProductionPickDto GetTransferInDetailListByBillNo(
        WarehouseQuery query)
    {
        if (string.IsNullOrEmpty(query.billNo)) throw new Exception("调拨单号为空");
        var sql1 = string.Format(@"SELECT * FROM MES_DBCK WHERE FDocumentStatus = 'C' AND FBillNo = '{0}'", query.billNo);
        var dbck = Db.Ado.SqlQuery<ItemDetailModel>(sql1);
        if (dbck.Count < 1) throw new Exception("调拨单号不存在或未审核!");
        var sql2 = string.Format(@"SELECT c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel,b.FQty FQty,b.SQty SQty,b.RQty RQty,b.SQty - b.RQty DSQty ,
       dbo.F_QX_GETRECODEPOTSE(B.FMATERIALID,'','','') as RecoKw
    FROM MES_DBCK_DETAIL B
    LEFT JOIN MES_DBCK A ON A.ID = B.pid
    LEFT JOIN MES_ITEMS C ON  B.FMATERIALID = C.item_id
    LEFT JOIN WOMCAB D ON B.erpid = D.ERPID
    WHERE A.FBillNo = '{0}'  ORDER BY FSEQ", query.billNo);
        var womdabs = Db.Ado.SqlQuery<ItemDetailModel>(sql2);
        var DS_list = womdabs.Where(s => s.DSQty > 0).ToList();
        var YS_list = womdabs.Where(s => s.RQty > 0).ToList();
        //var p_bill_no = query.billNo;
        //// æ ¹æ®SQL查询条件获取待处理的出库明细
        //// å…³è”查询TransferOutDetail、TransferOut和MesItems三张表
        //// ç­›é€‰æ¡ä»¶:未完成数量大于0且单据已审核
        //var result = Db.Queryable<MesDbckDetail, MesDbck, MesItems>(
        //        (b, a, s) => new JoinQueryInfos(
        //            JoinType.Left, b.Pid == a.Id,
        //            JoinType.Left, b.FMaterialId == s.Id.ToString()))
        //    .Where((b, a, s) =>
        //        !((b.FQty ?? 0) == (b.SQty ?? 0) && (b.FQty ?? 0) == (b.RQty ?? 0))
        //        && a.FBillNo == p_bill_no // åŒ¹é…å•据号
        //        && a.FApproveStatus == 1) // å•据已审核
        //    .OrderBy((b, a, s) => s.ItemNo)
        //    .Select((b, a, s) => new ItemDetailModel
        //    {
        //        ItemNo = s.ItemNo,
        //        ItemName = s.ItemName,
        //        ItemModel = s.ItemModel,
        //        FQty = b.FQty, // ç”³è¯·æ•°é‡
        //        SQty = b.SQty, // å·²æ‰«æ•°é‡
        //        RQty = b.RQty, // å·²æ‰«æ•°é‡
        //        // ä¿ç•™å…¶ä»–必要字段...
        //        Pid = b.Pid.ToString(),
        //        FMaterialId = b.FMaterialId,
        //        Id = b.Id.ToString()
        //    })
        //    .ToList();
        //if(result.Count < 1) throw new Exception("该调拨单不存在或已扫完,请重新扫描");
        var dto = new ProductionPickDto
        {
            items = DS_list,
            Ysitems = YS_list
            // yisao = mesInvItemOutCDetailsList
        };
        return dto;
    }
    public List<ItemDetailModel> GetDBCKDetal(
@@ -130,7 +234,7 @@
    /// </summary>
    /// <param name="query">包含单据号、用户名和条码信息的查询参数</param>
    /// <returns>处理后的表单和待处理明细列表</returns>
    public (WarehouseQuery form, List<ItemDetailModel> items)
    public ProductionPickDto
        ScanMoveBarcode(WarehouseQuery query)
    {
        var p_bill_no = query.billNo;
@@ -148,8 +252,7 @@
        // æŸ¥è¯¢æ¡ç åº“存信息并验证
        var stock = Db.Queryable<MesInvItemStocks>()
            .Where(x => x.ItemBarcode == p_item_barcode
                        && x.Quantity > 0
                        && !string.IsNullOrEmpty(x.DepotsCode))
                        && x.Quantity > 0)
            .First();
        if (stock == null) throw new Exception($"库存中无此条码,请核对!{p_item_barcode}");
@@ -200,7 +303,18 @@
                    query.Fum = Convert.ToDecimal(splitNum);
                    // è¿”回更新后的表单和待处理明细
                    return (query, GetDBCKDetal(query));
                    //return (query, GetDBCKDetal(query));
                    var dto = new ProductionPickDto
                    {
                        itemNo = item.ItemNo,
                        barcodeNum = barcodeNum,
                        splitNum = splitNum,
                        barcode = query.barcode,
                        strMsg = _strMsg,
                        result = _intSum
                    };
                    return dto;
                }
                catch (Exception ex)
                {
@@ -223,6 +337,97 @@
        ScanReceiveBarcode(WarehouseQuery query)
    {
        var p_bill_no = query.billNo;
        var p_item_barcode = query.barcode;
        var barinfo = Db.Queryable<MesInvItemStocks>()
            .Where(x => x.ItemBarcode == p_item_barcode)
            .First();
        //// éªŒè¯å•据号
        //if (string.IsNullOrEmpty(p_bill_no)) throw new Exception("请选取单据号!");
        //// æŸ¥è¯¢å‡ºåº“单并验证状态
        //var transferOut = Db.Queryable<MesDbck>()
        //    .Where(x => x.FBillNo == p_bill_no && x.FApproveStatus == 1)
        //    .First();
        //if (transferOut == null) throw new Exception("未找到调拨申请单或者调拨申请单没审核");
        // æŸ¥è¯¢æ¡ç åº“存信息并验证
        var stock = Db.Queryable<MesDbckDetail>()
            .Where(x => x.FMaterialId == barinfo.ItemId.ToString()
                        && x.FQty > 0
                        && !string.IsNullOrEmpty(x.FStockInId)
                        && !string.IsNullOrEmpty(x.FOwnerInId))
            .First();
        if (stock == null) throw new Exception($"调拨明细中 ã€ç‰©æ–™ã€‘或 ã€è°ƒå…¥ä»“库】或【调入货主】信息不存在,请核对!{p_item_barcode}");
        // æŸ¥è¯¢ç‰©æ–™ä¿¡æ¯
        var item = Db.Queryable<MesItems>()
            .Where(x => x.Id.ToString() == stock.FMaterialId)
            .First();
        if (item == null) throw new Exception("未找到物料");
        var _strMsg = "";
        var _intSum = "";
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            using (var cmd = new SqlCommand("[prc_pda_DBRK]", 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("@outBillNo", SqlDbType.NVarChar, 300),
                        new("@c_user", query.userName),
                        new("@p_bill_no", p_bill_no),
                        new("@p_item_barcode", p_item_barcode),
                        new("@p_depot_section_code", query.sectionCode),
                    };
                    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 outBillNo = parameters[3].Value.ToString();
                    var result = Convert.ToInt32(_intSum);
                    if (result <= 0) throw new Exception(_strMsg);
                    query.itemNo = item.ItemNo;
                    query.Num = Convert.ToDecimal(barcodeNum);
                    //query.Fum = Convert.ToDecimal(splitNum);
                    query.billNo = outBillNo;
                    // è¿”回更新后的表单和待处理明细
                    return (query, GetDBCKDetal(query));
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
    public ProductionPickDto ScanCodeCF(WarehouseQuery query)
    {
        var p_bill_no = query.daa001;
        var p_item_barcode = query.barcode;
        var barinfo = Db.Queryable<MesInvItemStocks>()
@@ -255,9 +460,10 @@
        var _strMsg = "";
        var _intSum = "";
        var _cfBar = "";
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            using (var cmd = new SqlCommand("[prc_pda_DBRK]", conn))
            using (var cmd = new SqlCommand("[prc_pda_DBCK_CF]", conn))
            {
                try
                {
@@ -265,86 +471,36 @@
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter[] parameters =
                    {
                        new("@outMsg", SqlDbType.NVarChar, 300),
                        new("@outMsg", SqlDbType.NVarChar, 2000),
                        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", p_bill_no),
                        new("@p_item_barcode", p_item_barcode),
                        new("@p_depot_section_code", query.sectionCode),
                        new("@outCfBar", SqlDbType.NVarChar, 300),
                        new("@c_User", query.userName),
                        new("@p_biLL_no", query.daa001),
                        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;
                    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();
                    _cfBar = parameters[2].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);
                    query.itemNo = item.ItemNo;
                    query.Num = Convert.ToDecimal(barcodeNum);
                    query.Fum = Convert.ToDecimal(splitNum);
                    // è¿”回更新后的表单和待处理明细
                    return (query, GetDBCKDetal(query));
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
    //调拨出库拆分 prc_pda_DBCK_CF
    public string SplitBarcode(WarehouseQuery query)
    {
        var _strMsg = "";
        var _intSum = "";
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            using (var cmd = new SqlCommand("[prc_pda_DBRK]", conn))
            {
                try
                {
                    conn.Open();
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter[] parameters =
                    var dto = new ProductionPickDto
                    {
                        new("@outMsg", SqlDbType.NVarChar, 300),
                        new("@outSum", SqlDbType.NVarChar, 300),
                        new("@c_user", query.userName),
                        new("@p_bill_no", query.billNo),
                        new("@p_item_barcode", query.barcode),
                        new("@NUM", query.Fum),
                        daa001 = query.daa001,
                        barcode = query.barcode,//原条码
                        cfBarcode = _cfBar//拆分后条码
                    };
                    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 dto;
                }
                catch (Exception ex)
                {
@@ -357,4 +513,5 @@
            }
        }
    }
}
service/Wom/WomdaahbManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,1090 @@
using System.Data;
using System.Data.SqlClient;
using System.Text;
using Masuit.Tools;
using Microsoft.SqlServer.Server;
using NewPdaSqlServer.DB;
using NewPdaSqlServer.Dto.service;
using NewPdaSqlServer.entity;
using NewPdaSqlServer.entity.Base;
using SqlSugar;
namespace NewPdaSqlServer.service.Wom;
public class WomdaaManager : Repository<Womdaa>
{
    //当前类已经继承了 Repository å¢žã€åˆ ã€æŸ¥ã€æ”¹çš„æ–¹æ³•
    //这里面写的代码不会给覆盖,如果要重新生成请删除 WomdaaManager.cs
    //获取工单号
    public List<string> GetProductionPickDaa001(WarehouseQuery query)
    {
        var sql =
            "SELECT DAA001 FROM WOMDAA A LEFT JOIN (SELECT COUNT(1) UN_NUM, PID FROM WOMDAB  WHERE DAB006 > DAB007 GROUP BY DAB002) B ON A.GUID = B.daaGuid WHERE DAA001 = " +
            query.daa001 +
            " and DAA018 != '完工' AND DAA022 = 1 AND UN_NUM > 0 AND ROWNUM <= 10 order by a.id desc";
        return Db.Ado.SqlQuery<string>(sql);
    }
    //根据工单号返回产品型号和待领物料
    public ProductionPickDto GetItemsByDaa001(WarehouseQuery query)
    {
        return getDaa001(query);
    }
    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.daa001.IsNullOrEmpty()) throw new Exception("领料单号不允许为空");
            if (query.barcode.IsNullOrEmpty()) throw new Exception("条码不允许为空");
            using (var cmd = new SqlCommand("[prc_pda_SCLL]", 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.daa001),
                        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.daa001,
                        barcodeNum = barcodeNum,
                        splitNum = splitNum,
                        barcode = query.barcode,
                        strMsg = _strMsg,
                        result = _intSum
                    };
                    return dto;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
    //prC_pda_SCLL_CF
    public ProductionPickDto ScanCodeCF(WarehouseQuery query)
    {
        if (query.userName.IsNullOrEmpty()) throw new Exception("用户名不允许为空");
        if (query.daa001.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_SCLL_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.daa001),
                        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.daa001,
                        barcode = query.barcode,//原条码
                        cfBarcode = _cfBar//拆分后条码
                    };
                    return dto;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
    private ProductionPickDto getDaa001(WarehouseQuery query)
    {
        if (string.IsNullOrEmpty(query.daa001)) throw new Exception("工单号为空");
        var womdaa = Db.Queryable<Womdaa, MesItems>((a, i) =>
                new JoinQueryInfos(JoinType.Left,
                    a.Daa002 == i.ItemId.ToString()))
            .Where((a, i) => a.Daa001 == query.daa001
                    && a.Fstatus == 1)
            .Select((a, i) => new
            {
                a.Daa001, a.CaaGuid
            }).First();
        if (womdaa?.Daa001 == null) throw new Exception("工单号不存在");
        //var womdabs = Db.Queryable<Womdaa, Womdab, MesItems, Womcab>(
        //        (a, b, c, d) =>
        //            new JoinQueryInfos(
        //                JoinType.Left,
        //                a.Guid == b.DaaGuid,
        //                JoinType.Inner,
        //                c.Id.ToString() ==
        //                b.Dab003,
        //                JoinType.Inner, b.Erpid == d.Erpid
        //            ))
        //    .Where((a, b, c, d) =>
        //        a.Daa001 == query.daa001 && d.Iss1ueType == "1")
        //    .Select((a, b, c, d) => new ItemDetailModel
        //    {
        //        ItemNo = c.ItemNo,
        //        ItemName = c.ItemName,
        //        ItemModel = c.ItemModel,
        //        FQty = b.Dab006, // ç”³è¯·æ•°é‡
        //        SQty = b.Dab007, // å·²æ‰«æ•°é‡
        //        DSQty = b.Dab006 - b.Dab007, // å·²æ‰«æ•°é‡
        //    })
        //    .ToList();
        var sql =string.Format(@"SELECT c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel,b.dab006 FQty,b.dab007 SQty,b.dab006 - b.dab007 DSQty ,
       dbo.F_QX_GETRECODEPOTSE(B.dab003,'','','') as RecoKw
    FROM WOMDAB B
    LEFT JOIN WOMDAA A ON A.guid = B.daaGuid
    LEFT JOIN MES_ITEMS C ON  B.dab003 = C.item_id
    LEFT JOIN WOMCAB D ON B.erpid = D.ERPID
    WHERE daa001 = '{0}' AND ISSUE_TYPE = 1 ORDER BY DAB002", query.daa001);
        var womdabs = Db.Ado.SqlQuery<ItemDetailModel>(sql);
        var DS_list = womdabs.Where(s => s.DSQty > 0).ToList();
        var YS_list = womdabs.Where(s => s.SQty > 0).ToList();
        var mesInvItemOutCDetailsList = Db
            .Queryable<MesInvItemOutCDetails, MesItems, MesDepots>
            ((a, b, c) =>
                new JoinQueryInfos(
                    JoinType.Inner, a.ItemId == b.Id,
                    JoinType.Inner, c.DepotId == a.DepotId
                ))
            .Where((a, b, c) => a.WorkNo == query.daa001)
            .Select((a, b, c) => new MesInvItemOutCDetails
            {
                ItemName = b.ItemName,
                ItemNo = b.ItemNo,
                ItemId = a.ItemId,
                DepotId = a.DepotId,
                WorkNo = a.WorkNo,
                DepotName = c.DepotName,
                Quantity = a.Quantity
            })
            .ToList();
        var womcaa = Db.Queryable<Womcaa>().Where(s => s.Guid == womdaa.CaaGuid)
            .First();
        if (womcaa == null)
        {
            throw new Exception("生产任务单不存在");
        }
        var dto = new ProductionPickDto
        {
            daa001 = womdaa.Daa001,
            PlanNo = womcaa.Caa020,
            items = DS_list,
            Ysitems = YS_list
            // yisao = mesInvItemOutCDetailsList
        };
        return dto;
    }
    /// <summary>
    /// èŽ·å–å·¥å•æ¡ç ä¿¡æ¯
    /// </summary>
    /// <param name="query"></param>
    /// <returns></returns>
    public dynamic getZsBarInfo(dynamic query)
    {
        var sql = string.Format(@"SELECT TOP 1 A.barCode AS zsBarcode,
             D.name AS lineName,
             D.line_no,
             B.daa001,
             C.item_no,
             C.item_name,
             C.item_model,
             A.quantity as barQty,
             B.daa008 as sumQty,
             isnull((SELECT count(1) FROM WORK_COLLECT WHERE processNo = '{0}' AND ABOUT_GUID = A.ABOUT_GUID),0) AS finQty,
             isnull((SELECT TOP 1 processNo FROM WORK_COLLECT WHERE  WORK_COLLECT.barCode = '{1}' AND checkResult = '√' ORDER BY WORK_COLLECT.createDate DESC ),'') AS lastGx
FROM WORK_TRAC_CODE A
         LEFT JOIN WOMDAA B ON A.ABOUT_GUID = B.guid
         LEFT JOIN MES_ITEMS C ON B.daa002 = C.item_id
         LEFT JOIN MES_WORKSHOP_LINE D ON A.lineId = D.id
WHERE A.barCode = '{1}'", query.GX, query.Zsbarcode);
        var ZsBarInfo = Db.Ado.SqlQuery<dynamic>(sql);
        if (ZsBarInfo.Count < 1)
        {
            throw new Exception($"该追溯码{query.Zsbarcode}不存在不存在");
        }
        return ZsBarInfo;
    }
    //获取生产
    public dynamic getTraceability(dynamic query)
    {
        var sql = string.Format(@"SELECT processNo, A.barCode, B.lineId, line_no, name AS lineName, checkResult, C.USER_NAME
FROM WORK_COLLECT A
         LEFT JOIN WORK_TRAC_CODE B ON A.barCode = B.barCode
         LEFT JOIN SYS_USER C ON C.ACCOUNT = A.createBy
         LEFT JOIN MES_WORKSHOP_LINE D ON B.lineId = D.id
WHERE A.barCode = '{0}'", query.Zsbarcode);
        var Traceability = Db.Ado.SqlQuery<dynamic>(sql);
        return Traceability;
    }
    public dynamic ProductBinding(dynamic query)
    {
        if (query == null) throw new ArgumentNullException(nameof(query), "参数对象不能为 null");
        // 2. ä½¿ç”¨ string.IsNullOrEmpty ç›´æŽ¥åˆ¤æ–­å­—符串属性(避免 NullReferenceException)
        if (string.IsNullOrEmpty(query.userName?.ToString()))
            throw new ArgumentException("用户名不允许为空", nameof(query.userName));
        if (string.IsNullOrEmpty(query.ZsBar?.ToString()))
            throw new ArgumentException("追溯码不允许为空", nameof(query.ZsBar));
        if (string.IsNullOrEmpty(query.LsBar?.ToString()))
            throw new ArgumentException("后盖码不允许为空", nameof(query.LsBar));
        var _strMsg = "";
        var _intSum = "";
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            using (var cmd = new SqlCommand("prc_pda_product_binding", conn))
            {
                try
                {
                    conn.Open();
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter[] parameters =
                    {
                        new("@pi_user", SqlDbType.NVarChar, 100) { Value = query.userName },
                        new("@pi_trac_barcode", SqlDbType.NVarChar, 100) { Value = query.ZsBar },
                        new("@pi_ls_barcode", SqlDbType.NVarChar, 100) { Value = query.LsBar },
                        new("@po_outMsg", SqlDbType.NVarChar, 2000) { Direction = ParameterDirection.Output },
                        new("@po_outStatus", SqlDbType.Int) { Direction = ParameterDirection.Output }
                    };
                    foreach (var parameter in parameters)
                        cmd.Parameters.Add(parameter);
                    cmd.ExecuteNonQuery();
                    _strMsg = parameters[3].Value?.ToString() ?? "";
                    _intSum = parameters[4].Value?.ToString() ?? "-1";
                    var result = Convert.ToInt32(_intSum);
                    if (result <= 0) throw new Exception(_strMsg);
                    var dto = new
                    {
                        message = _strMsg,
                        status = result,
                        tracBarcode = query.ZsBar
                    };
                    return dto;
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
    /// <summary>
    /// èŽ·å–å¡æ¿ä¿¡æ¯
    /// </summary>
    /// <param name="query"></param>
    /// <returns></returns>
    public dynamic getKbBarInfo(dynamic query)
    {
        if (string.IsNullOrEmpty(query.Kbbarcode?.ToString()))
            throw new ArgumentException("卡板条码不允许为空", nameof(query.userName));
        var sql = string.Format(@"SELECT OLDQTY,
       ISNULL((SELECT COUNT(1) FROM MES_INV_ITEM_BARCODES_TBMX WHERE ABOUT_TB_BARCODE = '{0}'), 0) AS YSum,
       DAA001
FROM MES_INV_ITEM_BARCODES A LEFT JOIN WOMDAA B ON A.ABOUT_GUID = B.guid
WHERE ITEM_BARCODE = '{0}' ",  query.Kbbarcode);
        var ZsBarInfo = Db.Ado.SqlQuery<dynamic>(sql);
        if (ZsBarInfo.Count < 1)
        {
            throw new Exception($"该卡板码{query.Zsbarcode}不存在!");
        }
        return ZsBarInfo;
    }
    /// <summary>
    /// èŽ·å–å¡æ¿æ˜Žç»†ä¿¡æ¯
    /// </summary>
    /// <param name="query"></param>
    /// <returns></returns>
    public dynamic getKbBarMxInfo(dynamic query)
    {
        var sql = string.Format(@"SELECT ITEM_BARCODE, QUANTITY,item_no,item_name,item_model,weight
FROM MES_INV_ITEM_BARCODES_TBMX A
         LEFT JOIN WOMDAA B ON B.daa001 = A.DAA_001
        LEFT JOIN MES_ITEMS C ON C.item_id = B.daa002
WHERE ABOUT_TB_BARCODE = '{0}' ", query.Kbbarcode);
        var ZsBarInfo = Db.Ado.SqlQuery<dynamic>(sql);
        return ZsBarInfo;
    }
    /// <summary>
    /// èŽ·å–ç®±æ˜Žç»†ä¿¡æ¯
    /// </summary>
    /// <param name="query"></param>
    /// <returns></returns>
    public dynamic getXBarInfo(dynamic query)
    {
        //var sql1 = string.Format(@"SELECT 1 FROM MES_INV_ITEM_BARCODES_TBMX WHERE  ITEM_BARCODE = '{0}' ", query.Xbarcode);
        //var IS_CZ = Db.Ado.SqlQuery<dynamic>(sql1);
        //if (IS_CZ.Count < 1)
        //{
        //    throw new Exception($"该箱条码[{query.Xbarcode}]不存在!");
        //}
        // æ ¡éªŒå­˜å‚¨è¿‡ç¨‹
        if (string.IsNullOrEmpty(query.KbBar?.ToString()))
            throw new ArgumentException("卡板条码不允许为空", nameof(query.KbBar));
        // æ ¡éªŒå­˜å‚¨è¿‡ç¨‹
        if (string.IsNullOrEmpty(query.Xbarcode?.ToString()))
            throw new ArgumentException("箱条码不允许为空", nameof(query.Xbarcode));
        var successRecords = new List<dynamic>();
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            conn.Open();
            using (var transaction = conn.BeginTransaction()) // å¼€å¯äº‹åŠ¡
            {
                try
                {
                        using (var cmd = new SqlCommand("prc_pda_Xbar_binding_JY", conn, transaction))
                        {
                            cmd.CommandType = CommandType.StoredProcedure;
                            SqlParameter[] parameters =
                            {
                                new("@pi_user", SqlDbType.NVarChar, 100) { Value = query.userName },
                                new("@pi_kb_barcode", SqlDbType.NVarChar, 100) { Value = query.KbBar },
                                new("@pi_ls_barcode", SqlDbType.NVarChar, 100) { Value = query.Xbarcode },
                                new("@po_outMsg", SqlDbType.NVarChar, 2000) { Direction = ParameterDirection.Output },
                                new("@po_outStatus", SqlDbType.Int) { Direction = ParameterDirection.Output }
                            };
                            foreach (var parameter in parameters)
                                cmd.Parameters.Add(parameter);
                            cmd.ExecuteNonQuery();
                            var _strMsg = parameters[3].Value?.ToString() ?? "";
                            var _intSum = parameters[4].Value?.ToString() ?? "-1";
                            var result = Convert.ToInt32(_intSum);
                            if (result <= 0)
                            {
                                //transaction.Rollback();
                                throw new Exception(_strMsg);
                                //return new {
                                //    status = result,
                                //    message = $"操作回滚:{_strMsg}",
                                //    failedBarcode = xBar.iteM_BARCODE,
                                //    successCount = successRecords.Count
                                //};
                            }
                        }
                    transaction.Commit(); // å…¨éƒ¨æˆåŠŸæäº¤äº‹åŠ¡
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    throw new Exception($"异常信息  ï¼š{ex.Message}");
                }
                finally
                {
                    conn.Close();
                }
            }
        }
            var sql2 = string.Format(@"SELECT ITEM_BARCODE, QUANTITY,item_no,item_name,item_model,'0' as is_hedui
FROM MES_INV_ITEM_BARCODES_TBMX A
         LEFT JOIN WOMDAA B ON B.daa001 = A.DAA_001
         LEFT JOIN MES_ITEMS C ON C.item_id = B.daa002
WHERE DAA_001 = '{0}'
  AND ITEM_BARCODE = '{1}'
  AND ISNULL(ABOUT_TB_BARCODE, '') = '' ", query.DAA001, query.Xbarcode);
        var ZsBarInfo = Db.Ado.SqlQuery<dynamic>(sql2);
        if (ZsBarInfo.Count < 1)
        {
            throw new Exception($"该箱条码[{query.Xbarcode}]对应工单与托码工单[{query.DAA001}]不匹配或已绑定托码!");
        }
        return ZsBarInfo;
    }
    public dynamic submitAllChecked(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.KbBar?.ToString()))
            throw new ArgumentException("卡板条码不允许为空", nameof(query.KbBar));
        if (query.XbarInfo == null || !((IEnumerable<dynamic>)query.XbarInfo).GetEnumerator().MoveNext())
            throw new ArgumentException("箱码列表不能为空", nameof(query.XbarInfo));
        var successRecords = new List<dynamic>();
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            conn.Open();
            using (var transaction = conn.BeginTransaction()) // å¼€å¯äº‹åŠ¡
            {
                try
                {
                    foreach (var xBar in query.XbarInfo) // éåŽ†ç®±ç é›†åˆ
                    {
                        using (var cmd = new SqlCommand("prc_pda_Xbar_binding", conn, transaction))
                        {
                            cmd.CommandType = CommandType.StoredProcedure;
                            SqlParameter[] parameters =
                            {
                                new("@pi_user", SqlDbType.NVarChar, 100) { Value = query.userName },
                                new("@pi_kb_barcode", SqlDbType.NVarChar, 100) { Value = query.KbBar },
                                new("@pi_ls_barcode", SqlDbType.NVarChar, 100) { Value = xBar.iteM_BARCODE },
                                new("@po_outMsg", SqlDbType.NVarChar, 2000) { Direction = ParameterDirection.Output },
                                new("@po_outStatus", SqlDbType.Int) { Direction = ParameterDirection.Output }
                            };
                            foreach (var parameter in parameters)
                                cmd.Parameters.Add(parameter);
                            cmd.ExecuteNonQuery();
                            var _strMsg = parameters[3].Value?.ToString() ?? "";
                            var _intSum = parameters[4].Value?.ToString() ?? "-1";
                            var result = Convert.ToInt32(_intSum);
                            if (result <= 0)
                            {
                                //transaction.Rollback();
                                throw new Exception(_strMsg);
                                //return new {
                                //    status = result,
                                //    message = $"操作回滚:{_strMsg}",
                                //    failedBarcode = xBar.iteM_BARCODE,
                                //    successCount = successRecords.Count
                                //};
                            }
                            successRecords.Add(new {
                                kbBarcode = query.KbBar,
                                xBarcode = xBar.iteM_BARCODE,
                                processTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
                            });
                        }
                    }
                    transaction.Commit(); // å…¨éƒ¨æˆåŠŸæäº¤äº‹åŠ¡
                    return new {
                        status = 1,
                        message = "批量绑定成功",
                        successCount = successRecords.Count,
                        details = successRecords
                    };
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    throw new Exception($"异常信息  ï¼š{ex.Message}");
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
    public dynamic SubmitKbInspection(dynamic query)
    {
        if (query == null) throw new ArgumentNullException(nameof(query), "参数对象不能为 null");
        // å‚数校验
        if (string.IsNullOrEmpty(query.userAccount?.ToString()))
            throw new ArgumentException("用户名不允许为空", nameof(query.userAccount));
        if (string.IsNullOrEmpty(query.KbBar?.ToString()))
            throw new ArgumentException("卡板条码不允许为空", nameof(query.KbBar));
        var _strMsg = "";
        var _status = -1;
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            using (var cmd = new SqlCommand("prc_pda_KBbar_submitInspection", conn))
            {
                try
                {
                    conn.Open();
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter[] parameters =
                    {
                        new("@pi_user", SqlDbType.NVarChar, 100) { Value = query.userAccount },
                        new("@pi_kb_barcode", SqlDbType.NVarChar, 100) { Value = query.KbBar },
                        new("@po_outMsg", SqlDbType.NVarChar, 2000) { Direction = ParameterDirection.Output },
                        new("@po_outStatus", SqlDbType.Int) { Direction = ParameterDirection.Output }
                    };
                    foreach (var parameter in parameters)
                        cmd.Parameters.Add(parameter);
                    cmd.ExecuteNonQuery();
                    _strMsg = parameters[2].Value?.ToString() ?? "";
                    _status = Convert.ToInt32(parameters[3].Value ?? -1);
                    if (_status <= 0) throw new Exception(_strMsg);
                    return new {
                        message = _strMsg,
                        status = _status,
                        kbBarcode = query.KbBar
                    };
                }
                catch (Exception ex)
                {
                    throw new Exception($"卡板送检失败:{ex.Message}");
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
    //根据工单号返回产品型号和待领物料
    public XcslResultDto GetItemsXcsl(WarehouseQuery query)
    {
        if (string.IsNullOrEmpty(query.daa001)) throw new Exception("工单号为空");
        var womdaa = Db.Queryable<Womdaa, MesItems>((a, i) =>
                new JoinQueryInfos(JoinType.Left,
                    a.Daa002 == i.ItemId.ToString()))
            .Where((a, i) => a.Daa001 == query.daa001
                    && a.Fstatus == 1)
            .Select((a, i) => new
            {
                a.Daa001,
                a.CaaGuid,
                a.Daa008,
                a.Daa021
            }).First();
        if (womdaa?.Daa001 == null) throw new Exception("工单号不存在");
        // ä½¿ç”¨å‚数化查询防止SQL注入
        var sqlParams = new List<SugarParameter> { new("@daa001", query.daa001) };
        var sql1 = @"SELECT A.item_out_no,
       SUM(B.QUANTITY)         AS BL_Num,
       ISNULL(Sub.JS_Sum, 0) AS JS_Num, -- ä½¿ç”¨LEFT JOIN子查询的结果
       C.item_no,
       C.item_name,
       C.item_model,
       D.USER_NAME
FROM MES_INV_ITEM_OUTS A
         LEFT JOIN MES_INV_ITEM_OUT_C_DETAILS B ON A.GUID = B.ITEM_OUT_ID
         LEFT JOIN MES_ITEMS C ON B.ITEM_ID = C.item_id
         LEFT JOIN SYS_USER D ON A.create_by = D.ACCOUNT
-- æ–°å¢žLEFT JOIN聚合子查询
         LEFT JOIN (SELECT B1.ITEM_ID,
                           SUM(B1.QUANTITY) AS JS_Sum
                    FROM MES_INV_ITEM_OUTS A1
                             LEFT JOIN MES_INV_ITEM_OUT_C_DETAILS B1 ON A1.GUID = B1.ITEM_OUT_ID
                    WHERE A1.out_type = '生产领料'
                      AND A1.task_no = @daa001
                      AND ISNULL(B1.IS_XCSL, '0') = 1
                    GROUP BY B1.ITEM_ID -- æŒ‰ITEM_ID提前聚合
) AS Sub ON Sub.ITEM_ID = C.item_id
WHERE A.out_type = '生产领料'
  AND A.task_no = @daa001
GROUP BY A.item_out_no,
         C.item_no,
         C.item_name,
         C.item_model,
         D.USER_NAME,
         C.item_id,
         ISNULL(Sub.JS_Sum, 0);";
        var XcslItem = Db.Ado.SqlQuery<dynamic>(sql1, sqlParams);
        var sql2 = @"SELECT B.ITEM_BARCODE ,B.QUANTITY,C.item_no,C.item_name,D.USER_NAME,A.create_date
FROM MES_INV_ITEM_OUTS A
LEFT JOIN MES_INV_ITEM_OUT_C_DETAILS B ON A.GUID = B.ITEM_OUT_ID
LEFT JOIN MES_ITEMS C ON B.ITEM_ID = C.item_id
LEFT JOIN SYS_USER D ON A.create_by = D.ACCOUNT
WHERE out_type = '生产领料'
AND A.task_no = @daa001
AND ISNULL(IS_XCSL,'0') = 0";
        var XcslWjsBar = Db.Ado.SqlQuery<dynamic>(sql2, sqlParams);
        var sql3 = @"SELECT B.ITEM_BARCODE ,B.QUANTITY,C.item_no,C.item_name,D.USER_NAME,B.XCSL_CREATE_DATE
FROM MES_INV_ITEM_OUTS A
LEFT JOIN MES_INV_ITEM_OUT_C_DETAILS B ON A.GUID = B.ITEM_OUT_ID
LEFT JOIN MES_ITEMS C ON B.ITEM_ID = C.item_id
LEFT JOIN SYS_USER D ON B.XCSL_CREATE_BY = D.ACCOUNT
WHERE out_type = '生产领料'
AND A.task_no = @daa001
AND ISNULL(IS_XCSL,'0') = 1";
        var XcslYjsBar = Db.Ado.SqlQuery<dynamic>(sql3, sqlParams);
        var dto = new XcslResultDto
        {
            GD_Num = womdaa.Daa008,
            workNo = womdaa.Daa021,
            XcslItemList = XcslItem,
            XcslWjsBarList = XcslWjsBar,
            XcslYjsBarList = XcslYjsBar
        };
        return dto;
    }
    // çŽ°åœºæ”¶æ–™å±•ç¤ºåˆ—è¡¨
    public class XcslResultDto
    {
        public int? GD_Num { get; set; }
        public string? workNo { get; set; }
        public List<dynamic> XcslItemList { get; set; }
        public List<dynamic> XcslWjsBarList { get; set; }
        public List<dynamic> XcslYjsBarList { get; set; }
    }
    public dynamic ScanXcsl(dynamic query)
    {
        if (query == null) throw new ArgumentNullException(nameof(query), "参数对象不能为 null");
        // å‚数校验(根据存储过程新增参数)
        if (string.IsNullOrEmpty(query.userAccount?.ToString()))
            throw new ArgumentException("用户名不允许为空", nameof(query.userAccount));
        if (string.IsNullOrEmpty(query.Bar?.ToString()))
            throw new ArgumentException("物料条码不允许为空", nameof(query.Bar));
        if (string.IsNullOrEmpty(query.DAA001?.ToString()))
            throw new ArgumentException("工单单号不允许为空", nameof(query.DAA001));
        var _strMsg = "";
        var _status = -1;
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            using (var cmd = new SqlCommand("prc_pda_ScanXcsl", conn))
            {
                try
                {
                    conn.Open();
                    cmd.CommandType = CommandType.StoredProcedure;
                    // æ ¹æ®å­˜å‚¨è¿‡ç¨‹è°ƒæ•´å‚数顺序和命名
                    SqlParameter[] parameters =
                    {
                        new("@pi_user", SqlDbType.NVarChar, 100) { Value = query.userAccount },
                        new("@pi_barcode", SqlDbType.NVarChar, 100) { Value = query.Bar },
                        new("@pi_daa001", SqlDbType.NVarChar, 100) { Value = query.DAA001 },
                        new("@po_outMsg", SqlDbType.NVarChar, 2000) { Direction = ParameterDirection.Output },
                        new("@po_outStatus", SqlDbType.Int) { Direction = ParameterDirection.Output }
                    };
                    foreach (var parameter in parameters)
                        cmd.Parameters.Add(parameter);
                    cmd.ExecuteNonQuery();
                    _strMsg = parameters[3].Value?.ToString() ?? "";
                    _status = Convert.ToInt32(parameters[4].Value ?? -1);
                    if (_status <= 0) throw new Exception(_strMsg);
                    return new
                    {
                        message = _strMsg,
                        status = _status,
                        daa001 = query.DAA001,
                        barCode = query.Bar
                    };
                }
                catch (Exception ex)
                {
                    throw new Exception($"产线收料失败:{ex.Message}");
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
    public dynamic GetWeightByXt(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.LsBar?.ToString()))
            throw new ArgumentException("卡板条码不允许为空", nameof(query.LsBar));
        var _strMsg = "";
        var _status = -1;
        var _weight = "0";
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            using (var cmd = new SqlCommand("prc_pda_Xbar_chenzhong", conn))
            {
                try
                {
                    conn.Open();
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter[] parameters =
                    {
                        new("@pi_user", SqlDbType.NVarChar, 100) { Value = query.userName },
                        new("@pi_ls_barcode", SqlDbType.NVarChar, 100) { Value = query.LsBar },
                        new("@po_outMsg", SqlDbType.NVarChar, 2000) { Direction = ParameterDirection.Output },
                        new("@po_outStatus", SqlDbType.Int) { Direction = ParameterDirection.Output },
                        new("@po_outWeight", SqlDbType.NVarChar, 100) { Direction = ParameterDirection.Output }
                    };
                    cmd.Parameters.AddRange(parameters);
                    cmd.ExecuteNonQuery();
                    _strMsg = parameters[2].Value?.ToString() ?? "";
                    _status = Convert.ToInt32(parameters[3].Value ?? -1);
                    _weight = parameters[4].Value?.ToString() ?? "0";
                    if (_status <= 0) throw new Exception(_strMsg);
                    return new
                    {
                        message = _strMsg,
                        status = _status,
                        weight = _weight,
                        barCode = query.Bar
                    };
                }
                catch (Exception ex)
                {
                    throw new Exception($"产品称重失败:{ex.Message}");
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
    public dynamic GetXcslDaa(dynamic unity)
    {
        var sqlParams = new List<SugarParameter> { };
        var sql2 = new StringBuilder(@"
        SELECT '['+DAA001+']['+DAA021+']' AS daaInfo,DAA001,DAA021
        FROM WOMDAA
        WHERE daa018 <>'W:完工'");
        if (!string.IsNullOrWhiteSpace(unity.selectKey?.ToString()))
        {
            sqlParams.Add(new("@selectKey", unity.selectKey));
            sql2.Append(@"
            AND (DAA001 LIKE '%' + @selectKey + '%'
            OR DAA021 LIKE '%' + @selectKey + '%')");
        }
        var XcslItem = Db.Ado.SqlQuery<dynamic>(sql2.ToString(), sqlParams);
        if (XcslItem == null)
        {
            throw new Exception("该条件下无对应工单信息,请重新输入!");
        }
        return XcslItem;
    }
    public XcslResultDto GetItemsXctl(WarehouseQuery query)
    {
        if (string.IsNullOrEmpty(query.daa001)) throw new Exception("工单号为空");
        var womdaa = Db.Queryable<Womdaa, MesItems>((a, i) =>
                new JoinQueryInfos(JoinType.Left,
                    a.Daa002 == i.ItemId.ToString()))
            .Where((a, i) => a.Daa001 == query.daa001
                    && a.Fstatus == 1)
            .Select((a, i) => new
            {
                a.Daa001,
                a.CaaGuid,
                a.Daa008,
                a.Daa021
            }).First();
        if (womdaa?.Daa001 == null) throw new Exception("工单号不存在");
        // ä½¿ç”¨å‚数化查询防止SQL注入
        var sqlParams = new List<SugarParameter> { new("@daa001", query.daa001) };
        var sql1 = @"SELECT A.item_out_no,
       SUM(B.QUANTITY)          AS BL_Num,
       ISNULL(SL_SUM.JS_Sum, 0) AS JS_Num,
       ISNULL(TL_SUM.JS_Sum, 0) AS TR_Num,
       C.item_no,
       C.item_name,
       C.item_model
FROM MES_INV_ITEM_OUTS A
         LEFT JOIN MES_INV_ITEM_OUT_C_DETAILS B ON A.GUID = B.ITEM_OUT_ID
         LEFT JOIN MES_ITEMS C ON B.ITEM_ID = C.item_id
         LEFT JOIN SYS_USER D ON A.create_by = D.ACCOUNT
         LEFT JOIN (SELECT B1.ITEM_ID,
                           SUM(B1.QUANTITY) AS JS_Sum
                    FROM MES_INV_ITEM_OUTS A1
                             LEFT JOIN MES_INV_ITEM_OUT_C_DETAILS B1 ON A1.GUID = B1.ITEM_OUT_ID
                    WHERE A1.out_type = '生产领料'
                      AND A1.task_no = @daa001
                      AND ISNULL(B1.IS_XCSL, '0') = 1
                    GROUP BY B1.ITEM_ID
) AS SL_SUM ON SL_SUM.ITEM_ID = C.item_id
         LEFT JOIN (SELECT B1.ITEM_ID,
                           SUM(B1.QUANTITY) AS JS_Sum
                    FROM MES_INV_ITEM_OUTS A1
                             LEFT JOIN MES_INV_ITEM_OUT_C_DETAILS B1 ON A1.GUID = B1.ITEM_OUT_ID
                    WHERE A1.out_type = '生产领料'
                      AND A1.task_no = @daa001
                      AND ISNULL(B1.IS_CXTR, '0') = 1
                    GROUP BY B1.ITEM_ID
) AS TL_SUM ON TL_SUM.ITEM_ID = C.item_id
WHERE A.out_type = '生产领料'
  AND A.task_no = @daa001
GROUP BY A.item_out_no,
         C.item_no,
         C.item_name,
         C.item_model,
         D.USER_NAME,
         C.item_id,
         ISNULL(SL_SUM.JS_Sum, 0),
         ISNULL(TL_SUM.JS_Sum, 0);";
        var XcslItem = Db.Ado.SqlQuery<dynamic>(sql1, sqlParams);
        var sql2 = @"SELECT B.ITEM_BARCODE ,B.QUANTITY,C.item_no,C.item_name,D.USER_NAME,A.create_date
FROM MES_INV_ITEM_OUTS A
LEFT JOIN MES_INV_ITEM_OUT_C_DETAILS B ON A.GUID = B.ITEM_OUT_ID
LEFT JOIN MES_ITEMS C ON B.ITEM_ID = C.item_id
LEFT JOIN SYS_USER D ON A.create_by = D.ACCOUNT
WHERE out_type = '生产领料'
AND A.task_no = @daa001
AND ISNULL(IS_CXTR,'0') = 0";
        var XcslWjsBar = Db.Ado.SqlQuery<dynamic>(sql2, sqlParams);
        var sql3 = @"SELECT B.ITEM_BARCODE ,B.QUANTITY,C.item_no,C.item_name,D.USER_NAME,B.CXTR_CREATE_DATE
FROM MES_INV_ITEM_OUTS A
LEFT JOIN MES_INV_ITEM_OUT_C_DETAILS B ON A.GUID = B.ITEM_OUT_ID
LEFT JOIN MES_ITEMS C ON B.ITEM_ID = C.item_id
LEFT JOIN SYS_USER D ON B.CXTR_CREATE_BY = D.ACCOUNT
WHERE out_type = '生产领料'
AND A.task_no = @daa001
AND ISNULL(IS_CXTR,'0') = 1";
        var XcslYjsBar = Db.Ado.SqlQuery<dynamic>(sql3, sqlParams);
        var dto = new XcslResultDto
        {
            GD_Num = womdaa.Daa008,
            workNo = womdaa.Daa021,
            XcslItemList = XcslItem,
            XcslWjsBarList = XcslWjsBar,
            XcslYjsBarList = XcslYjsBar
        };
        return dto;
    }
    public dynamic ScanXctl(dynamic query)
    {
        if (query == null) throw new ArgumentNullException(nameof(query), "参数对象不能为 null");
        // å‚数校验(根据存储过程新增参数)
        if (string.IsNullOrEmpty(query.userAccount?.ToString()))
            throw new ArgumentException("用户名不允许为空", nameof(query.userAccount));
        if (string.IsNullOrEmpty(query.Bar?.ToString()))
            throw new ArgumentException("物料条码不允许为空", nameof(query.Bar));
        if (string.IsNullOrEmpty(query.DAA001?.ToString()))
            throw new ArgumentException("工单单号不允许为空", nameof(query.DAA001));
        var _strMsg = "";
        var _status = -1;
        using (var conn = new SqlConnection(DbHelperSQL.strConn))
        {
            using (var cmd = new SqlCommand("prc_pda_ScanXctl", conn))
            {
                try
                {
                    conn.Open();
                    cmd.CommandType = CommandType.StoredProcedure;
                    // æ ¹æ®å­˜å‚¨è¿‡ç¨‹è°ƒæ•´å‚数顺序和命名
                    SqlParameter[] parameters =
                    {
                        new("@pi_user", SqlDbType.NVarChar, 100) { Value = query.userAccount },
                        new("@pi_barcode", SqlDbType.NVarChar, 100) { Value = query.Bar },
                        new("@pi_daa001", SqlDbType.NVarChar, 100) { Value = query.DAA001 },
                        new("@po_outMsg", SqlDbType.NVarChar, 2000) { Direction = ParameterDirection.Output },
                        new("@po_outStatus", SqlDbType.Int) { Direction = ParameterDirection.Output }
                    };
                    foreach (var parameter in parameters)
                        cmd.Parameters.Add(parameter);
                    cmd.ExecuteNonQuery();
                    _strMsg = parameters[3].Value?.ToString() ?? "";
                    _status = Convert.ToInt32(parameters[4].Value ?? -1);
                    if (_status <= 0) throw new Exception(_strMsg);
                    return new
                    {
                        message = _strMsg,
                        status = _status,
                        daa001 = query.DAA001,
                        barCode = query.Bar
                    };
                }
                catch (Exception ex)
                {
                    throw new Exception($"产线收料失败:{ex.Message}");
                }
                finally
                {
                    conn.Close();
                }
            }
        }
    }
}