南骏 池
2025-06-06 e3c48fc91c4ee3a959209a5926e8657c362ac2e6
1.其他出入库优化
已修改4个文件
283 ■■■■■ 文件已修改
appsettings.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
entity/MesItemQt.cs 167 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/Warehouse/MesItemQtManager.cs 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/Warehouse/MesItemQtrkManager.cs 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
appsettings.json
@@ -9,7 +9,7 @@
  "AppSettings": {
    "TestErpUrl": "http://192.168.1.149:8066/WebService1.asmx/MesToErpinfoTest",
    "ProductionErpUrl": "http://192.168.1.149:8066/WebService1.asmx/MesToErpinfoTest",
    "DataBaseConn": "Data Source=192.168.1.146;Initial Catalog=TEST_MES;User ID=sa;Password =qixi123;Encrypt=True;TrustServerCertificate=True;"
    //"DataBaseConn": "Data Source=192.168.1.146;Initial Catalog=GS_MES;User ID=sa;Password =qixi123;Encrypt=True;TrustServerCertificate=True;"
    //"DataBaseConn": "Data Source=192.168.1.146;Initial Catalog=TEST_MES;User ID=sa;Password =qixi123;Encrypt=True;TrustServerCertificate=True;"
    "DataBaseConn": "Data Source=192.168.1.146;Initial Catalog=GS_MES;User ID=sa;Password =qixi123;Encrypt=True;TrustServerCertificate=True;"
  }
}
entity/MesItemQt.cs
@@ -1,149 +1,222 @@
using SqlSugar;
using System;
namespace NewPdaSqlServer.entity;
/// <summary>
/// 其他出库申请表 - MES_ITEM_QT
/// </summary>
[SugarTable("MES_ITEM_QT")]
public class MesItemQt
{
    /// <summary>
    ///     默认值: (newid())
    /// 主键Guid
    /// </summary>
    [SugarColumn(ColumnName = "guid", IsPrimaryKey = true)]
    public Guid Guid { get; set; }
    public Guid Guid { get; set; } = Guid.NewGuid();
    /// <summary>
    ///     申请单号
    /// 申请单号
    /// </summary>
    [SugarColumn(ColumnName = "qtck")]
    public string? Qtck { get; set; }
    public string Qtck { get; set; }
    /// <summary>
    ///     申请日期
    /// 申请日期
    /// </summary>
    [SugarColumn(ColumnName = "qt001")]
    public DateTime? Qt001 { get; set; }
    public DateTime Qt001 { get; set; } = DateTime.Now;
    /// <summary>
    ///     审核日期
    /// 审核日期
    /// </summary>
    [SugarColumn(ColumnName = "qt002")]
    public DateTime? Qt002 { get; set; }
    /// <summary>
    ///     出库类别
    /// 出库类别
    /// </summary>
    [SugarColumn(ColumnName = "qt003")]
    public string? Qt003 { get; set; }
    public string Qt003 { get; set; }
    /// <summary>
    ///     业务类型
    /// 业务类型
    /// </summary>
    [SugarColumn(ColumnName = "qt004")]
    public string? Qt004 { get; set; }
    public string Qt004 { get; set; }
    /// <summary>
    ///     制单人
    /// 制单人
    /// </summary>
    [SugarColumn(ColumnName = "qt005")]
    public string? Qt005 { get; set; }
    public string Qt005 { get; set; }
    /// <summary>
    ///     生产工单
    /// 生产工单
    /// </summary>
    [SugarColumn(ColumnName = "qt006")]
    public string? Qt006 { get; set; }
    public string Qt006 { get; set; }
    /// <summary>
    ///     发料仓库id
    /// 发料仓库ID
    /// </summary>
    [SugarColumn(ColumnName = "qt008")]
    public string? Qt008 { get; set; }
    public string Qt008 { get; set; }
    /// <summary>
    ///     申请部门id
    /// 领用部门ID
    /// </summary>
    [SugarColumn(ColumnName = "qt009")]
    public string? Qt009 { get; set; }
    public string Qt009 { get; set; }
    /// <summary>
    ///     出库原因
    /// 出库原因
    /// </summary>
    [SugarColumn(ColumnName = "qt010")]
    public string? Qt010 { get; set; }
    public string Qt010 { get; set; }
    /// <summary>
    ///     仓库编码
    /// 仓库编码
    /// </summary>
    [SugarColumn(ColumnName = "qt011")]
    public string? Qt011 { get; set; }
    public string Qt011 { get; set; }
    /// <summary>
    ///     部门编码
    /// 部门编码
    /// </summary>
    [SugarColumn(ColumnName = "qt012")]
    public string? Qt012 { get; set; }
    public string Qt012 { get; set; }
    /// <summary>
    ///     数量
    /// 领用客户ID
    /// </summary>
    [SugarColumn(ColumnName = "qt013")]
    public int? Qt013 { get; set; }
    public int Qt013 { get; set; }
    /// <summary>
    ///     完结标识
    ///     默认值: ((0))
    /// 完结标识,默认0
    /// </summary>
    [SugarColumn(ColumnName = "qt014")]
    public bool? Qt014 { get; set; }
    public bool Qt014 { get; set; } = false;
    /// <summary>
    ///     审核状态
    ///     默认值: ((0))
    /// 审核状态,默认0
    /// </summary>
    [SugarColumn(ColumnName = "qt015")]
    public bool? Qt015 { get; set; }
    public bool Qt015 { get; set; } = false;
    /// <summary>
    ///     审核人
    /// 审核人
    /// </summary>
    [SugarColumn(ColumnName = "qt016")]
    public string? Qt016 { get; set; }
    public string Qt016 { get; set; }
    /// <summary>
    ///     任务单号
    /// 任务单号
    /// </summary>
    [SugarColumn(ColumnName = "qt017")]
    public string? Qt017 { get; set; }
    public string Qt017 { get; set; }
    /// <summary>
    ///     客户
    /// 货主
    /// </summary>
    [SugarColumn(ColumnName = "qt018")]
    public string? Qt018 { get; set; }
    public string Qt018 { get; set; }
    /// <summary>
    ///     出库类型 1盘亏 2包材领用 3研发领用 4办公用品领用 5模具材料领用 6低值易耗品领用 7生产配件 8采购退料 9注塑件不良退料
    /// 单据类型:
    /// 1盘亏 2包材领用 3研发领用 4办公用品领用 5模具材料领用 6低值易耗品领用 7生产配件 8采购退料 9注塑件不良退料
    /// </summary>
    [SugarColumn(ColumnName = "qt019")]
    public string? Qt019 { get; set; }
    public string Qt019 { get; set; }
    /// <summary>
    ///     出库方向(普通,退货)
    /// 库存方向(普通,退货)
    /// </summary>
    [SugarColumn(ColumnName = "qt020")]
    public string? Qt020 { get; set; }
    public string Qt020 { get; set; }
    /// <summary>
    ///     销售订单号
    /// 销售订单号
    /// </summary>
    [SugarColumn(ColumnName = "qt021")]
    public string? Qt021 { get; set; }
    public string Qt021 { get; set; }
    /// <summary>
    ///     领料人
    /// 领料人
    /// </summary>
    [SugarColumn(ColumnName = "qt022")]
    public string? Qt022 { get; set; }
    public string Qt022 { get; set; }
    /// <summary>
    /// 库存组织
    /// </summary>
    [SugarColumn(ColumnName = "qt023")]
    public string Qt023 { get; set; }
    /// <summary>
    /// 领用组织
    /// </summary>
    [SugarColumn(ColumnName = "qt024")]
    public string Qt024 { get; set; }
    /// <summary>
    /// 货主类型
    /// </summary>
    [SugarColumn(ColumnName = "qt025")]
    public string Qt025 { get; set; }
    /// <summary>
    /// 是否售后审核
    /// </summary>
    [SugarColumn(ColumnName = "qt026")]
    public bool? Qt026 { get; set; }
    /// <summary>
    /// 售后审核时间
    /// </summary>
    [SugarColumn(ColumnName = "qt027")]
    public DateTime? Qt027 { get; set; }
    /// <summary>
    /// 售后审核人
    /// </summary>
    [SugarColumn(ColumnName = "qt028")]
    public string Qt028 { get; set; }
    /// <summary>
    /// 财务审核
    /// </summary>
    [SugarColumn(ColumnName = "qt029")]
    public bool? Qt029 { get; set; }
    /// <summary>
    /// 财务审核时间
    /// </summary>
    [SugarColumn(ColumnName = "qt030")]
    public DateTime? Qt030 { get; set; }
    /// <summary>
    /// 财务审核人
    /// </summary>
    [SugarColumn(ColumnName = "qt031")]
    public string Qt031 { get; set; }
    /// <summary>
    /// 采购审核
    /// </summary>
    [SugarColumn(ColumnName = "qt032")]
    public bool? Qt032 { get; set; }
    /// <summary>
    /// 采购审核时间
    /// </summary>
    [SugarColumn(ColumnName = "qt033")]
    public DateTime? Qt033 { get; set; }
    /// <summary>
    /// 采购审核人
    /// </summary>
    [SugarColumn(ColumnName = "qt034")]
    public string Qt034 { get; set; }
}
service/Warehouse/MesItemQtManager.cs
@@ -1,6 +1,7 @@
using NewPdaSqlServer.DB;
using NewPdaSqlServer.Dto.service;
using NewPdaSqlServer.entity;
using NewPdaSqlServer.entity.Base;
using NewPdaSqlServer.util;
using SqlSugar;
@@ -15,12 +16,15 @@
    /// <returns>退料单号列表</returns>
    public List<string> GetPendingQtList()
    {
        return Db.Queryable<MesItemQt>()
            .Where(it =>
                (it.Qt015 ?? false) == true && (it.Qt014 ?? false) == false)
            .OrderByDescending(it => it.Qtck)
            .Select(it => it.Qtck)
            .ToList();
        const string sql = @"SELECT qtck
                        FROM MES_ITEM_QT
                        WHERE qt015 = 1
                          AND qt026 = 1
                          AND QT029 = 1
                          AND qt032 = 1
                          AND QT014 = 0  ";
        return Db.Ado.SqlQuery<string>(sql);
    }
    /// <summary>
@@ -28,7 +32,7 @@
    /// </summary>
    /// <param name="query">仓库查询参数,包含用户名和单据号</param>
    /// <returns>待处理的退料单明细列表</returns>
    public List<MesItemQtDatall> GetPendingQtList(WarehouseQuery query)
    public ProductionPickDto GetPendingQtList(WarehouseQuery query)
    {
        // 从查询参数中获取用户名和单据号
        var c_User = query.userName;
@@ -42,41 +46,44 @@
        // 如果未找到退料单,抛出异常
        if (mesItemQt == null) throw new Exception($"未查询到此其他入库申请单 {p_bill_no}");
        // 检查退料单的审核状态(Qt015),未审核则抛出异常
        if (mesItemQt.Qt015 == false)
            throw new Exception($"其他出库申请单 {p_bill_no} 未审核,请确认!");
        //// 检查退料单的审核状态(Qt015),未审核则抛出异常
        //if (mesItemQt.Qt015 == false)
        //    throw new Exception($"其他出库申请单 {p_bill_no} 未审核,请确认!");
        // 检查退料单的完结状态(Qt014),已完结则抛出异常
        if (mesItemQt.Qt014 == true)
            throw new Exception($"其他出库申请单 {p_bill_no} 已完结,请确认!");
        // 联表查询获取未完成的明细列表
        // 关联表:
        // - MesItemQt: 退料单主表(a)
        // - MesItemQtDatall: 退料单明细表(b)
        // - MesItems: 物料基础信息表(c)
        var pendingList = Db.Queryable<MesItemQt, MesItemQtDatall, MesItems>(
                (a, b, c) =>
                    new JoinQueryInfos(
                        JoinType.Left, a.Guid == b.QtGuid, // 主表和明细表通过Guid关联
                        JoinType.Left,
                        b.ItemId == c.Id.ToString())) // 明细表和物料表通过ItemId关联
            .Where((a, b, c) =>
                a.Qtck == p_bill_no && // 匹配单据号
                (b.Qd007 ?? 0) - (b.Qd008 ?? 0) >
                0) // 计划数量减去已完成数量大于0的记录(即未完成的记录)
            .OrderBy((a, b, c) => c.ItemNo) // 按物料编号排序
            .Select((a, b, c) => new MesItemQtDatall
            {
                Qd002 = b.Qd002, // 明细行号
                Qt011 = a.Qt011, // 退料原因
                ItemNo = c.ItemNo, // 物料编号
                Qd007 = b.Qd007 ?? 0, // 计划数量
                Qd008 = b.Qd008 ?? 0 // 已完成数量
            })
            .ToList();
        var sql = @"SELECT c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel,
                    ISNULL(A.qd007,0)  FQty,ISNULL(A.qd008,0) SQty,ISNULL(A.qd007,0) - ISNULL(A.qd008,0) DSQty
                    FROM MES_ITEM_QT_DATALL A
                    LEFT JOIN MES_ITEM_QT B ON A.qtGuid = B.guid
                    LEFT JOIN MES_ITEMS C ON A.itemId = C.item_id
                    WHERE B.qtck = @billNo AND (qt015 = 1 AND qt026 =1 AND QT029 = 1 AND qt032 = 1)";
        return pendingList;
        var sqlParams = new List<SugarParameter> {
            new("@billNo", query.billNo)
        };
        var womdabs = Db.Ado.SqlQuery<ItemDetailModel>(sql, sqlParams);
        // 检查退料单的完结状态(Qt014),已完结则抛出异常
        if (womdabs.Count < 1)
            throw new Exception($"该其他出库申请单 {p_bill_no} 未全部审核,请确认!");
        var DS_list = womdabs.Where(s => s.DSQty > 0).ToList();
        var YS_list = womdabs.Where(s => s.SQty > 0).ToList();
        var dto = new ProductionPickDto
        {
            //daa001 = womdaa.Daa001,
            //PlanNo = womcaa.Caa020,
            items = DS_list,
            Ysitems = YS_list
        };
        return dto;
    }
    public (WarehouseQuery form, List<MesItemQtDatall> item, string message)
@@ -135,7 +142,7 @@
        // 获取其他出库单信息
        var mesItemQt = Db.Queryable<MesItemQt>()
            .Where(it => it.Qtck == p_bill_no)
            .Where(it => it.Qtck == p_bill_no && it.Qt015 == true && it.Qt026 == true && it.Qt029 == true && it.Qt032 == true)
            .First();
        if (mesItemQt == null)
@@ -435,6 +442,11 @@
            query.Num = stock.Quantity;
            query.Fum = null;
            // 创建 插入日志
            var logService = new LogService();
            var LogMsg = "【PDA】其他出库。条码【" + query.barcode + "】数量【"+ stock.Quantity.ToString() + "】 出库单号【" + outNo + "】";
            logService.CreateLog(db, query.userName, mesItemQt.Guid.ToString(), "MES_ITEM_QT", LogMsg, mesItemQt.Qtck);
            if (commit < 5) throw new Exception("更新失败");
            return commit;
service/Warehouse/MesItemQtrkManager.cs
@@ -12,10 +12,17 @@
{
    public List<string> GetQtckList()
    {
        return Db.Queryable<MesItemQtrk>()
            .Where(x => (x.Qt015 ?? 0) == 1 && (x.Qt014 ?? 0) == 0)
            .Select(x => x.Qtck)
            .ToList();
        //return Db.Queryable<MesItemQtrk>()
        //    .Where(x => (x.Qt015 ?? 0) == 1 && (x.Qt014 ?? 0) == 0)
        //    .Select(x => x.Qtck)
        //    .ToList();
        const string sql = @"SELECT qtck
                        FROM MES_ITEM_QTRK
                        WHERE  QT015 = 1 AND QT028 = 1 AND QT032 = 1
                          AND QT014 = 0  ";
        return Db.Ado.SqlQuery<string>(sql);
    }
    public ProductionPickDto GetQtckDetailList(WarehouseQuery query)
@@ -27,11 +34,11 @@
        if (mesInvItemOuts == null) throw new Exception("其他入库申请单不存在");
        var sql = @"SELECT c.item_no ItemNo,c.item_name ItemName,c.item_model ItemModel,
                    A.qd007 FQty,A.qd008 SQty,A.qd007 - A.qd008 DSQty
                    ISNULL(A.qd007,0) FQty,ISNULL(A.qd008,0) SQty,ISNULL(A.qd007,0) - ISNULL(A.qd008,0) DSQty
                    FROM MES_ITEM_QTRR_DETAIL A
                    LEFT JOIN MES_ITEM_QTRK B ON A.qtrkGuid = B.guid
                    LEFT JOIN MES_ITEMS C ON A.itemId = C.item_id
                    WHERE B.qtck = @billNo";
                    WHERE B.qtck = @billNo AND QT015 = 1 AND QT028 = 1 AND QT032 = 1 AND QT014 = 0 ";
        var sqlParams = new List<SugarParameter> {
            new("@billNo", query.billNo)
@@ -39,6 +46,8 @@
        var womdabs = Db.Ado.SqlQuery<ItemDetailModel>(sql, sqlParams);
        if (womdabs.Count < 1)
            throw new Exception($"该其他入库申请单 {query.billNo} 未全部审核或已完结,请确认!");
        var DS_list = womdabs.Where(s => s.DSQty > 0).ToList();
@@ -458,6 +467,11 @@
                    .Where(x => x.Qtck == p_bill_no)
                    .ExecuteCommand();
            // 创建 插入日志
            var logService = new LogService();
            var LogMsg = "【PDA】其他入库。条码【" + query.barcode + "】数量【" + barcode.Quantity.ToString() + "】 入库单号【" + billNo + "】";
            logService.CreateLog(db, query.userName, qtrk.Guid.ToString(), "MES_ITEM_QTRK", LogMsg, qtrk.Qtck);
            if (res < 5) throw new Exception("插入或更新失败");
            return res;