南骏 池
2025-02-26 ccc519c681dacd75cd4079a1f3740c6f891430bd
1.MES->ERP调拨出库
已修改4个文件
已删除1个文件
已添加2个文件
706 ■■■■■ 文件已修改
Controllers/Warehouse/MesDbckController.cs 138 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
entity/MesDbModel.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
entity/MesDbck.cs 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
entity/MesDbckDetail.cs 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
entity/MesDbckEtail.cs 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/Warehouse/MesDbckManager.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/Warehouse/TransferOutManager.cs 94 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Controllers/Warehouse/MesDbckController.cs
@@ -88,75 +88,75 @@
        }
    }
    /// <summary>
    ///     æ·»åŠ 
    /// </summary>
    /// <returns></returns>
    [HttpPost("Insert")]
    public ResponseResult Add([FromBody] MesDbck 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("Insert")]
    //public ResponseResult Add([FromBody] MesDbck 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] MesDbck 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("InsertReturnIdentity")]
    //public ResponseResult InsertReturnIdentity([FromBody] MesDbck 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] MesDbck 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);
        }
    }
    ///// <summary>
    /////     ä¿®æ”¹
    ///// </summary>
    ///// <returns></returns>
    //[HttpPost("Update")]
    //public ResponseResult Update([FromBody] MesDbck 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);
    //    }
    //}
}
entity/MesDbModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using SqlSugar;
namespace MES.Service.Modes;
//调拨出入库单通用类
public class TransferOutDetailModel
{
    public string ItemNo { get; set; } // ç‰©å“ç¼–号
    public string ItemName { get; set; } // ç‰©å“åç§°
    public string ItemModel { get; set; } // ç‰©å“åž‹å·
    public decimal? FQty { get; set; } // ç”³è¯·æ•°é‡
    public decimal? SQty { get; set; } // è°ƒå‡ºå·²æ‰«æ•°é‡
    public decimal? RQty { get; set; } // è°ƒå…¥å·²æ‰«æ•°é‡
    public string Pid { get; set; } // å…³è”字段
    public string FMaterialId { get; set; } // ææ–™ ID
    public string Id { get; set; } // ä¸»é”® ID
}
entity/MesDbck.cs
@@ -1,201 +1,172 @@
using SqlSugar;
namespace NewPdaSqlServer.entity;
namespace MES.Service.Modes;
/// <summary>
///     è°ƒæ‹¨å‡ºåº“申请
/// </summary>
[SugarTable("MES_DBCK")]
public class MesDbck
{
    /// <summary>
    ///     ä¸»é”®
    /// </summary>
    [SugarColumn(ColumnName = "id", IsPrimaryKey = true)]
    public Guid Id { get; set; }
    public Guid? Id { get; set; }
    /// <summary>
    ///     å•据编号
    /// </summary>
    [SugarColumn(ColumnName = "FBillNo")]
    public string? FBillNo { get; set; }
    /// <summary>
    ///     å•据状态
    /// </summary>
    [SugarColumn(ColumnName = "FDocumentStatus")]
    public string? FDocumentStatus { get; set; }
    /// <summary>
    ///     ç”³è¯·æ—¥æœŸ
    /// </summary>
    [SugarColumn(ColumnName = "FDate")]
    public DateTime? FDate { get; set; }
    /// <summary>
    ///     ç”³è¯·ç»„织
    /// </summary>
    [SugarColumn(ColumnName = "FAPPORGID")]
    public string? FAppOrgId { get; set; }
    /// <summary>
    ///     å•据类型
    /// </summary>
    [SugarColumn(ColumnName = "fbilltypeid")]
    public string? Fbilltypeid { get; set; }
    [SugarColumn(ColumnName = "FBillTypeID")]
    public string? FBillTypeId { get; set; }
    /// <summary>
    ///     è°ƒæ‹¨æ–¹å‘
    ///     ä¸šåŠ¡ç±»åž‹
    /// </summary>
    [SugarColumn(ColumnName = "ftransferdirect")]
    public string? Ftransferdirect { get; set; }
    [SugarColumn(ColumnName = "FBusinessType")]
    public string? FBusinessType { get; set; }
    /// <summary>
    ///     è°ƒæ‹¨ç±»åž‹
    /// </summary>
    [SugarColumn(ColumnName = "ftransferbiztype")]
    public string? Ftransferbiztype { get; set; }
    [SugarColumn(ColumnName = "FTRANSTYPE")]
    public string? FTransType { get; set; }
    /// <summary>
    ///     è°ƒå‡ºåº“存组织
    ///     è°ƒæ‹¨æ–¹å‘
    /// </summary>
    [SugarColumn(ColumnName = "fstockoutorgid")]
    public string? Fstockoutorgid { get; set; }
    /// <summary>
    ///     è°ƒå…¥åº“存组织
    /// </summary>
    [SugarColumn(ColumnName = "fstockorgid")]
    public string? Fstockorgid { get; set; }
    [SugarColumn(ColumnName = "FTransferDirect")]
    public string? FTransferDirect { get; set; }
    /// <summary>
    ///     è°ƒå‡ºè´§ä¸»ç±»åž‹
    /// </summary>
    [SugarColumn(ColumnName = "fownertypeoutidhead")]
    public string? Fownertypeoutidhead { get; set; }
    /// <summary>
    ///     è°ƒå‡ºè´§ä¸»
    /// </summary>
    [SugarColumn(ColumnName = "fowneroutidhead")]
    public string? Fowneroutidhead { get; set; }
    [SugarColumn(ColumnName = "FOwnerTypeIdHead")]
    public string? FOwnerTypeIdHead { get; set; }
    /// <summary>
    ///     è°ƒå…¥è´§ä¸»ç±»åž‹
    /// </summary>
    [SugarColumn(ColumnName = "fownertypeidhead")]
    public string? Fownertypeidhead { get; set; }
    [SugarColumn(ColumnName = "FOwnerTypeInIdHead")]
    public string? FOwnerTypeInIdHead { get; set; }
    /// <summary>
    ///     è°ƒå…¥è´§ä¸»
    ///     å¤‡æ³¨
    /// </summary>
    [SugarColumn(ColumnName = "fowneridhead")]
    public string? Fowneridhead { get; set; }
    /// <summary>
    ///     é”€å”®ç»„织
    /// </summary>
    [SugarColumn(ColumnName = "fsaleorgid")]
    public string? Fsaleorgid { get; set; }
    [SugarColumn(ColumnName = "FRemarks")]
    public string? FRemarks { get; set; }
    /// <summary>
    ///     åˆ›å»ºäºº
    /// </summary>
    [SugarColumn(ColumnName = "create_by")]
    public string? CreateBy { get; set; }
    [SugarColumn(ColumnName = "FCreatorId")]
    public string? FCreatorId { get; set; }
    /// <summary>
    ///     åˆ›å»ºæ—¶é—´
    ///     åˆ›å»ºæ—¥æœŸ
    /// </summary>
    [SugarColumn(ColumnName = "cteate_data")]
    public DateTime? CteateData { get; set; }
    [SugarColumn(ColumnName = "FCreateDate")]
    public DateTime? FCreateDate { get; set; }
    /// <summary>
    ///     æœ€åŽè·Ÿæ–°äºº
    ///     æœ€åŽä¿®æ”¹äºº
    /// </summary>
    [SugarColumn(ColumnName = "lastupdate_by")]
    public string? LastupdateBy { get; set; }
    [SugarColumn(ColumnName = "FModifierId")]
    public string? FModifierId { get; set; }
    /// <summary>
    ///     æœ€åŽè·Ÿæ–°æ—¶é—´
    ///     æœ€åŽä¿®æ”¹æ—¥æœŸ
    /// </summary>
    [SugarColumn(ColumnName = "lastupdate_date")]
    public DateTime? LastupdateDate { get; set; }
    [SugarColumn(ColumnName = "FModifyDate")]
    public DateTime? FModifyDate { get; set; }
    /// <summary>
    ///     å®¡æ ¸æ—¥æœŸ
    /// </summary>
    [SugarColumn(ColumnName = "FAPPROVEDATE")]
    public DateTime? FApproveDate { get; set; }
    /// <summary>
    ///     å®¡æ ¸äºº
    /// </summary>
    [SugarColumn(ColumnName = "sh_by")]
    public string? ShBy { get; set; }
    /// <summary>
    ///     å®¡æ ¸æ—¶é—´
    /// </summary>
    [SugarColumn(ColumnName = "sh_date")]
    public DateTime? ShDate { get; set; }
    [SugarColumn(ColumnName = "FAPPROVEBY")]
    public string? FApproveBy { get; set; }
    /// <summary>
    ///     å®¡æ ¸çŠ¶æ€
    ///     é»˜è®¤å€¼: ((0))
    /// </summary>
    [SugarColumn(ColumnName = "sh_state")]
    public bool? ShState { get; set; }
    [SugarColumn(ColumnName = "FAPPROVEStatus")]
    public int? FApproveStatus { get; set; }
    /// <summary>
    ///     è°ƒæ‹¨ç±»åž‹ç¼–码
    ///     å…³é—­çŠ¶æ€
    /// </summary>
    [SugarColumn(ColumnName = "ftransferbiztype_no")]
    public string? FtransferbiztypeNo { get; set; }
    [SugarColumn(ColumnName = "FCloseStatus")]
    public string? FCloseStatus { get; set; }
    /// <summary>
    ///     è°ƒæ‹¨æ–¹å‘编码
    ///     å…³é—­äºº
    /// </summary>
    [SugarColumn(ColumnName = "ftransferdirect_no")]
    public string? FtransferdirectNo { get; set; }
    [SugarColumn(ColumnName = "FCloserId")]
    public string? FCloserId { get; set; }
    /// <summary>
    ///     è°ƒå‡ºä»“库
    ///     å…³é—­æ—¥æœŸ
    /// </summary>
    [SugarColumn(ColumnName = "inv_fcode")]
    public string? InvFcode { get; set; }
    [SugarColumn(ColumnName = "FCloseDate")]
    public DateTime? FCloseDate { get; set; }
    /// <summary>
    ///     è°ƒå‡ºä»“库名称
    ///     BOM版本
    /// </summary>
    [SugarColumn(ColumnName = "inv_fname")]
    public string? InvFname { get; set; }
    [SugarColumn(ColumnName = "F_UNW_Base_BOMBB")]
    public string? FUnwBaseBomBb { get; set; }
    /// <summary>
    ///     è°ƒå…¥ä»“库
    ///     çˆ¶é¡¹ç‰©æ–™ç¼–号
    /// </summary>
    [SugarColumn(ColumnName = "from_fcode")]
    public string? FromFcode { get; set; }
    [SugarColumn(ColumnName = "F_UNW_Base_FXWLBM")]
    public string? FUnwBaseFxwlBm { get; set; }
    /// <summary>
    ///     è°ƒå…¥ä»“库名称
    ///     æ˜¯å¦å®Œç»“
    /// </summary>
    [SugarColumn(ColumnName = "from_fname")]
    public string? FromFname { get; set; }
    [SugarColumn(ColumnName = "FINISHSTATUS")]
    public int? FinishStatus { get; set; }
    /// <summary>
    ///     è°ƒå‡ºåº“存组织ID
    ///     åšå•源头(ERP/MES)
    /// </summary>
    [SugarColumn(ColumnName = "fstockoutorgid_no")]
    public int? FstockoutorgidNo { get; set; }
    [SugarColumn(ColumnName = "Source")]
    public string? Source { get; set; }
    /// <summary>
    ///     è°ƒå…¥åº“存组织ID
    ///     ERP主键
    /// </summary>
    [SugarColumn(ColumnName = "fstockorgid_no")]
    public int? FstockorgidNo { get; set; }
    /// <summary>
    ///     è°ƒæ‹¨ç”³è¯·å•
    /// </summary>
    [SugarColumn(ColumnName = "billno")]
    public string? Billno { get; set; }
    /// <summary>
    ///     å•据类型编码
    /// </summary>
    [SugarColumn(ColumnName = "fbilltypeid_no")]
    public string? FbilltypeidNo { get; set; }
    /// <summary>
    ///     å‡ºåº“仓库
    /// </summary>
    [SugarColumn(ColumnName = "ck_depot")]
    public int? CkDepot { get; set; }
    /// <summary>
    ///     å…¥åº“仓库
    /// </summary>
    [SugarColumn(ColumnName = "rk_depot")]
    public int? RkDepot { get; set; }
    /// <summary>
    ///     å®Œç»“标识
    ///     é»˜è®¤å€¼: ((0))
    /// </summary>
    [SugarColumn(ColumnName = "is_wc")]
    public bool? IsWc { get; set; }
    /// <summary>
    /// </summary>
    [SugarColumn(ColumnName = "remark")]
    public string? Remark { get; set; }
    [SugarColumn(ColumnName = "ERPID")]
    public decimal? ErpID { get; set; }
}
entity/MesDbckDetail.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,152 @@
using SqlSugar;
namespace MES.Service.Modes;
/// <summary>
///     è°ƒæ‹¨å‡ºåº“申请详情
/// </summary>
[SugarTable("MES_DBCK_DETAIL")]
public class MesDbckDetail
{
    /// <summary>
    ///     ä¸»é”®
    /// </summary>
    [SugarColumn(ColumnName = "id", IsPrimaryKey = true)]
    public Guid? Id { get; set; }
    /// <summary>
    ///     çˆ¶çº§ID
    /// </summary>
    [SugarColumn(ColumnName = "pid")]
    public Guid? Pid { get; set; }
    /// <summary>
    ///     ç‰©æ–™ID
    /// </summary>
    [SugarColumn(ColumnName = "FMATERIALID")]
    public string? FMaterialId { get; set; }
    /// <summary>
    ///     æ•°é‡
    /// </summary>
    [SugarColumn(ColumnName = "FQty")]
    public decimal? FQty { get; set; }
    /// <summary>
    ///     è°ƒå‡ºå·²æ‰«æ•°é‡
    /// </summary>
    [SugarColumn(ColumnName = "SQty")]
    public decimal? SQty { get; set; }
    /// <summary>
    ///     è°ƒå…¥å·²æ‰«æ•°é‡
    /// </summary>
    [SugarColumn(ColumnName = "RQty")]
    public decimal? RQty { get; set; }
    /// <summary>
    ///     å•位ID
    /// </summary>
    [SugarColumn(ColumnName = "FUNITID")]
    public string? FUnitId { get; set; }
    /// <summary>
    ///     ä¸šåŠ¡å…³é—­çŠ¶æ€
    /// </summary>
    [SugarColumn(ColumnName = "FBusinessClose")]
    public string? FBusinessClose { get; set; }
    /// <summary>
    ///     æ‰¹æ¬¡å·
    /// </summary>
    [SugarColumn(ColumnName = "FLot")]
    public string? FLot { get; set; }
    /// <summary>
    ///     ç”Ÿäº§æ—¥æœŸ
    /// </summary>
    [SugarColumn(ColumnName = "FProduceDate")]
    public DateTime? FProduceDate { get; set; }
    /// <summary>
    ///     å‡ºåº“组织ID
    /// </summary>
    [SugarColumn(ColumnName = "FStockOrgId")]
    public string? FStockOrgId { get; set; }
    /// <summary>
    ///     å‡ºåº“仓库ID
    /// </summary>
    [SugarColumn(ColumnName = "FStockId")]
    public string? FStockId { get; set; }
    /// <summary>
    ///     å…¥åº“组织ID
    /// </summary>
    [SugarColumn(ColumnName = "FStockOrgInId")]
    public string? FStockOrgInId { get; set; }
    /// <summary>
    ///     å…¥åº“仓库ID
    /// </summary>
    [SugarColumn(ColumnName = "FStockInId")]
    public string? FStockInId { get; set; }
    /// <summary>
    ///     MTO编号
    /// </summary>
    [SugarColumn(ColumnName = "FMtoNo")]
    public string? FMtoNo { get; set; }
    /// <summary>
    ///     è°ƒå‡ºè´§ä¸»ID
    /// </summary>
    [SugarColumn(ColumnName = "FOwnerId")]
    public string? FOwnerId { get; set; }
    /// <summary>
    ///     è°ƒå…¥è´§ä¸»ID
    /// </summary>
    [SugarColumn(ColumnName = "FOwnerInId")]
    public string? FOwnerInId { get; set; }
    /// <summary>
    ///     å‡ºåº“状态ID
    /// </summary>
    [SugarColumn(ColumnName = "FStockStatusId")]
    public string? FStockStatusId { get; set; }
    /// <summary>
    ///     å…¥åº“状态ID
    /// </summary>
    [SugarColumn(ColumnName = "FStockStatusInId")]
    public string? FStockStatusInId { get; set; }
    /// <summary>
    ///     å¤‡æ³¨
    /// </summary>
    [SugarColumn(ColumnName = "FNote")]
    public string? FNote { get; set; }
    /// <summary>
    ///     åºå·
    /// </summary>
    [SugarColumn(ColumnName = "FSEQ")]
    public int? FSeq { get; set; }
    /// <summary>
    ///     ERP主键
    /// </summary>
    [SugarColumn(ColumnName = "ERPID")]
    public decimal? ErpID { get; set; }
    /// <summary>
    ///     ERP主键
    /// </summary>
    [SugarColumn(ColumnName = "EID")]
    public decimal? Eid { get; set; }
    //public string? ItemNo { get; set; }
    //public string? ItemName { get; set; }
    //public string? ItemModel { get; set; }
}
entity/MesDbckEtail.cs
ÎļþÒÑɾ³ý
service/Warehouse/MesDbckManager.cs
@@ -1,6 +1,6 @@
using NewPdaSqlServer.DB;
using NewPdaSqlServer.entity;
using MES.Service.Modes;
namespace NewPdaSqlServer.service.Warehouse;
public class MesDbckManager : Repository<MesDbck>
service/Warehouse/TransferOutManager.cs
@@ -1,5 +1,6 @@
using System.Data;
using System.Data.SqlClient;
using MES.Service.Modes;
using NewPdaSqlServer.DB;
using NewPdaSqlServer.Dto.service;
using NewPdaSqlServer.entity;
@@ -11,7 +12,7 @@
///     è°ƒæ‹¨å‡ºå…¥åº“管理类
///     è´Ÿè´£å¤„理调拨出库相关的业务逻辑
/// </summary>
public class TransferOutManager : Repository<TransferOut>
public class TransferOutManager : Repository<MesDbck>
{
    /// <summary>
    ///     èŽ·å–æœªå®Œæˆçš„è°ƒæ‹¨å‡ºåº“å•å·åˆ—è¡¨
@@ -20,7 +21,7 @@
    public List<string> GetTransferOutNoList()
    {
        // å…ˆä»Žæ•°æ®åº“获取Transfer_Out_ETAIL表的数据
        var transferOutDetails = Db.Queryable<TransferOutDetail>().ToList();
        var transferOutDetails = Db.Queryable<MesDbckDetail>().ToList();
        // ä½¿ç”¨LINQ对获取的数据进行分组和筛选
        // ç­›é€‰æ¡ä»¶:申请数量(sq)不等于已扫数量(ys)的记录
@@ -29,17 +30,18 @@
            .Select(g => new
            {
                pid = g.Key,
                sq = g.Sum(x => x.ShNum), // ç”³è¯·æ•°é‡åˆè®¡
                ys = g.Sum(x => x.YsNum) // å·²æ‰«æ•°é‡åˆè®¡
                sq = g.Sum(x => x.FQty), // ç”³è¯·æ•°é‡åˆè®¡
                ys = g.Sum(x => x.SQty), // è°ƒå‡ºå·²æ‰«æ•°é‡åˆè®¡
                rs = g.Sum(x => x.RQty), // è°ƒå…¥å·²æ‰«æ•°é‡åˆè®¡
            })
            .Where(x => (x.sq ?? 0) != (x.ys ?? 0))
            .Where(x => !((x.sq ?? 0) == (x.ys ?? 0) && (x.sq ?? 0) == (x.rs ?? 0)))
            .Select(x => x.pid)
            .ToList();
        // æ ¹æ®pid查询对应的出库单号
        var billNos = Db.Queryable<TransferOut>()
            .Where(x => result.Contains(x.Guid))
            .Select(x => x.BillNo)
        var billNos = Db.Queryable<MesDbck>()
            .Where(x => result.Contains(x.Id) && x.FApproveStatus == 1)
            .Select(x => x.FBillNo)
            .ToList();
        return billNos;
@@ -50,7 +52,7 @@
    /// </summary>
    /// <param name="query">查询参数,包含单据号</param>
    /// <returns>待处理的调拨出库明细列表</returns>
    public List<TransferOutDetail> GetTransferOutDetailListByBillNo(
    public List<TransferOutDetailModel> GetTransferOutDetailListByBillNo(
        WarehouseQuery query)
    {
        var p_bill_no = query.billNo;
@@ -58,25 +60,63 @@
        // æ ¹æ®SQL查询条件获取待处理的出库明细
        // å…³è”查询TransferOutDetail、TransferOut和MesItems三张表
        // ç­›é€‰æ¡ä»¶:未完成数量大于0且单据已审核
        var result = Db.Queryable<TransferOutDetail, TransferOut, MesItems>(
        var result = Db.Queryable<MesDbckDetail, MesDbck, MesItems>(
                (b, a, s) => new JoinQueryInfos(
                    JoinType.Left, b.Pid == a.Guid,
                    JoinType.Left, b.ItemId == s.Id))
                    JoinType.Left, b.Pid == a.Id,
                    JoinType.Left, b.FMaterialId == s.Id.ToString()))
            .Where((b, a, s) =>
                (b.ShNum ?? 0) - (b.YsNum ?? 0) > 0 // æœªå®Œæˆæ•°é‡å¤§äºŽ0
                && a.BillNo == p_bill_no // åŒ¹é…å•据号
                && a.Status == 1) // å•据已审核
                !((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 TransferOutDetail
            .Select((b, a, s) => new TransferOutDetailModel
            {
                ItemNo = s.ItemNo,
                ItemName = s.ItemName,
                ItemModel = s.ItemModel,
                ShNum = b.ShNum, // ç”³è¯·æ•°é‡
                YsNum = b.YsNum, // å·²æ‰«æ•°é‡
                FQty = b.FQty, // ç”³è¯·æ•°é‡
                SQty = b.SQty, // å·²æ‰«æ•°é‡
                RQty = b.RQty, // å·²æ‰«æ•°é‡
                // ä¿ç•™å…¶ä»–必要字段...
                Pid = b.Pid,
                ItemId = b.ItemId,
                Guid = b.Guid
                Pid = b.Pid.ToString(),
                FMaterialId = b.FMaterialId,
                Id = b.Id.ToString()
            })
            .ToList();
        if(result.Count < 1) throw new Exception("该调拨单不存在或已扫完,请重新扫描");
        return result;
    }
    public List<TransferOutDetailModel> GetDBCKDetal(
        WarehouseQuery query)
    {
        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) > 0 // æœªå®Œæˆæ•°é‡å¤§äºŽ0
                && a.FBillNo == p_bill_no // åŒ¹é…å•据号
                && a.FApproveStatus == 1) // å•据已审核
            .OrderBy((b, a, s) => s.ItemNo)
            .Select((b, a, s) => new TransferOutDetailModel
            {
                ItemNo = s.ItemNo,
                ItemName = s.ItemName,
                ItemModel = s.ItemModel,
                FQty = b.FQty, // ç”³è¯·æ•°é‡
                SQty = b.SQty, // å·²æ‰«æ•°é‡
                // ä¿ç•™å…¶ä»–必要字段...
                Pid = b.Pid.ToString(),
                FMaterialId = b.FMaterialId,
                Id = b.Id.ToString()
            })
            .ToList();
@@ -88,7 +128,7 @@
    /// </summary>
    /// <param name="query">包含单据号、用户名和条码信息的查询参数</param>
    /// <returns>处理后的表单和待处理明细列表</returns>
    public (WarehouseQuery form, List<TransferOutDetail> items)
    public (WarehouseQuery form, List<TransferOutDetailModel> items)
        ScanMoveBarcode(WarehouseQuery query)
    {
        var p_bill_no = query.billNo;
@@ -98,8 +138,8 @@
        if (string.IsNullOrEmpty(p_bill_no)) throw new Exception("请选取单据号!");
        // æŸ¥è¯¢å‡ºåº“单并验证状态
        var transferOut = Db.Queryable<TransferOut>()
            .Where(x => x.BillNo == p_bill_no && x.Status == 1)
        var transferOut = Db.Queryable<MesDbck>()
            .Where(x => x.FBillNo == p_bill_no && x.FApproveStatus == 1)
            .First();
        if (transferOut == null) throw new Exception("未找到调拨申请单或者调拨申请单没审核");
@@ -158,7 +198,7 @@
                    query.Fum = Convert.ToDecimal(splitNum);
                    // è¿”回更新后的表单和待处理明细
                    return (query, GetTransferOutDetailListByBillNo(query));
                    return (query, GetDBCKDetal(query));
                }
                catch (Exception ex)
                {
@@ -177,7 +217,7 @@
    /// </summary>
    /// <param name="query">包含单据号、用户名和条码信息的查询参数</param>
    /// <returns>处理后的表单和待处理明细列表</returns>
    public (WarehouseQuery form, List<TransferOutDetail> items)
    public (WarehouseQuery form, List<TransferOutDetailModel> items)
        ScanReceiveBarcode(WarehouseQuery query)
    {
        var p_bill_no = query.billNo;
@@ -248,7 +288,7 @@
                    query.Fum = Convert.ToDecimal(splitNum);
                    // è¿”回更新后的表单和待处理明细
                    return (query, GetTransferOutDetailListByBillNo(query));
                    return (query, GetDBCKDetal(query));
                }
                catch (Exception ex)
                {