南骏 池
2025-06-20 7b84eb64d11b12b6fb41ae7f7085452512ad5d3f
service/Wom/WwGdManager.cs
@@ -1,5 +1,6 @@
using System.Data;
using System.Data.SqlClient;
using System.Threading.Tasks.Dataflow;
using Masuit.Tools;
using NewPdaSqlServer.DB;
using NewPdaSqlServer.Dto.service;
@@ -58,7 +59,9 @@
                        daa001 = query.daa001,
                        barcodeNum = barcodeNum,
                        splitNum = splitNum,
                        barcode = query.barcode
                        barcode = query.barcode,
                        strMsg = _strMsg,
                        result = _intSum
                    };
                    return dto;
@@ -147,7 +150,7 @@
        var wwgd = Db.Queryable<WwGd, MesItems>((a, i) =>
                new JoinQueryInfos(JoinType.Left,
                    a.Daa003 == i.ItemId))
            .Where((a, i) => a.Daa001 == query.daa001)
            .Where((a, i) => a.Daa001 == query.daa001 && (a.PcSh ?? 0) == 1)
            .Select((a, i) => new
            {
                a.Daa001, a.RwdGuid
@@ -162,8 +165,7 @@
                        JoinType.Left,
                        a.Id == b.Pid,
                        JoinType.Inner,
                        c.Id ==
                        b.Dab003,
                        c.Id == b.Dab003,
                        JoinType.Inner, b.Erpid.ToString() == d.ErpId
                    ))
            .Where((a, b, c, d) =>
@@ -283,6 +285,8 @@
        if (c_mes_inv_item_barcodes == null)
            throw new Exception("此条码不属于该退料单,请核对!");
        // if (c_mes_inv_item_barcodes.Memo != "生产退料")
        //     throw new Exception("此条码不是生产退料条码,不可使用生产退料模块!");
@@ -295,14 +299,59 @@
        if (C_MES_ITEM_TBL.Tbl020 == 1) throw new Exception("扫码完成,申请单已完结!");
        // 检查工单信息
        var wwgd = Db.Queryable<WwGd>()
            .Where(a => a.Id.ToString() == C_MES_ITEM_TBL.Tbl002)
            .First();
        if (wwgd == null) throw new Exception("申请单对应的工单不存在或已删除,无法扫码!");
        // 检查工单信息
        var WWRWD = Db.Queryable<ProductionOrder>()
            .Where(a => a.OrderNo == wwgd.Daa014)
            .First();
        // 获取退料单明细
        var C_MES_ITEM_TBL_DETAIL = Db.Queryable<MesItemTblDetail>()
            .Where(a => a.Tlmid == C_MES_ITEM_TBL.Id
                        && a.Tld010 == c_mes_inv_item_barcodes.WorkLine)
            .Where(a => a.Tlid == c_mes_inv_item_barcodes.AboutGuid)
            .First();
        if (C_MES_ITEM_TBL_DETAIL == null)
            throw new Exception("条码不属于该申请单明细,无法扫码!");
        //判断货主信息
        var CABerpid = Db.Queryable<WwGdDetail>().Where(womdab => womdab.Id.ToString() == C_MES_ITEM_TBL_DETAIL.Tld013).Select(womdab => womdab.Erpid).First();
        var WWCAB = Db.Queryable<ProductionOrderSub>().Where(womcab => womcab.ErpId == CABerpid.Value.ToString()).First();
        if ( String.IsNullOrEmpty(WWCAB.Owner)) throw new Exception("用料清单货主信息不存在,无法扫码,请联系管理员!");
        //var owner_type = "";
        //if (Db.Queryable<SysOrganization>().Any(x => x.Fid == ownerId))
        //{
        //    owner_type = "BD_OwnerOrg";
        //}
        //else
        //{
        //    // 第二层判断:检查 MES_CUSTOMER
        //    if (Db.Queryable<MesCustomer>().Any(x => x.Id == Convert.ToInt32(ownerId)))
        //    {
        //        owner_type = "BD_Customer";
        //    }
        //    else
        //    {
        //        // 第三层判断:检查 MES_SUPPLIER
        //        if (Db.Queryable<MesSupplier>().Any(x => x.Id == Convert.ToInt32(ownerId)))
        //        {
        //            owner_type = "BD_Supplier";
        //        }
        //        else
        //        {
        //            throw new Exception("入库失败,用料清单货主信息存在问题,请联系管理员解决!");
        //        }
        //    }
        //}
        var c_quantity = c_mes_inv_item_barcodes.Quantity;
@@ -317,7 +366,7 @@
                .Where(d =>
                    d.Status == 0 && d.TransctionNo ==
                                  p_transction_no.ToString()
                                  && d.CbillNo == c_mes_inv_item_barcodes.BillNo
                                  && d.TaskNo == c_mes_inv_item_barcodes.BillNo
                                  && d.DepotsId == c_depot_code
                                  && d.InsDate.Value.ToString("yyyyMMdd") ==
                                  DateTime.Now.ToString("yyyyMMdd")).First();
@@ -327,7 +376,7 @@
            // 如果入库单不存在则创建新的入库单
            if (mesInvItemIns == null)
            {
                c_bill_no = BillNo.GetBillNo("IN(入库单)");
                c_bill_no = BillNo.GetBillNo("WWTL(委外退料)");
                c_id = Guid.NewGuid();
@@ -336,19 +385,26 @@
                    Guid = c_id,
                    BillNo = c_bill_no,
                    BillTypeId = p_bill_type_id,
                    InsDate = DateTime.Now,
                    DepotsId = c_depot_code,
                    UserNoBack = c_user,
                    Reason = C_MES_ITEM_TBL.Tbl005,
                    Remark = C_MES_ITEM_TBL.Tbl006,
                    InsDate = DateTime.Now,
                    // DepotsCode = c_depot_code,
                    DepotsId = c_depot_code,
                    //InsDate = DateTime.Now,
                    DepotsCode = c_mes_depots.DepotCode,
                    TaskNo = c_mes_inv_item_barcodes.BillNo,
                    //DepotsId = c_depot_code,
                    TransctionNo = p_transction_no.ToString(),
                    CreateBy = c_user,
                    CreateDate = DateTime.Now,
                    LastupdateBy = c_user,
                    LastupdateDate = DateTime.Now,
                    CbillNo = C_MES_ITEM_TBL.BillNo,
                    RbillNo = C_MES_ITEM_TBL.Tbl002
                    CbillNo = wwgd.Daa001,
                    InType = "委外退料",
                    ReceiveOrgId = c_mes_depots.FSubsidiary,
                    Fstatus = 0,
                    Status = 0,
                    WorkNo = WWRWD.ErpProductionOrderNo
                }).IgnoreColumns(true).ExecuteCommand();
            }
            else
@@ -360,6 +416,57 @@
            // 检查是否为合并打印条码
            var hbdy = c_mes_inv_item_barcodes.Hbdy ?? 0;
            if (hbdy == 1) throw new Exception("不支持合并打印的条码:" + p_item_barcode);
            // 检查是否存在于 MES_INV_ITEM_IN_C_ITEMS 表
            var existingCount = db.Queryable<MesInvItemInCItems>()
            .Where(it =>
                it.ItemInId == c_id &&
                                it.ItemId == C_MES_ITEM_TBL_DETAIL.Tld009 &&
                                it.DepotId == c_depot_code.ToString())
                .Count();
            if (existingCount == 0)
                // 不存在时插入新记录
                db.Insertable(new MesInvItemInCItems
                {
                    ItemInId = c_id,
                    Quantity = c_mes_inv_item_barcodes.Quantity,
                    CreateBy = c_user,
                    CreateDate = DateTime.Now,
                    ItemNo = c_mes_inv_item_barcodes.ItemNo,
                    //DepotCode = mesDepost.DepotCode,
                    ItemSname = c_mes_inv_item_barcodes.ItemSname,
                    Unit = c_mes_inv_item_barcodes.Unit,
                    Ebeln = c_mes_inv_item_barcodes.WorkNo,
                    BillNo = c_bill_no,
                    WorkNo = c_mes_inv_item_barcodes.WorkNo,
                    EbelnLineNo = c_mes_inv_item_barcodes.WorkLine,
                    CbillNo = c_mes_inv_item_barcodes.BillNo,
                    WorkLine = c_mes_inv_item_barcodes.WorkLine,
                    SuppId = c_mes_inv_item_barcodes.SuppId,
                    SuppNo = c_mes_inv_item_barcodes.SuppNo,
                    Remark = c_mes_inv_item_barcodes.Memo,
                    EbelnK3id = c_mes_inv_item_barcodes.EbelnK3id,
                    LineK3id = c_mes_inv_item_barcodes.LineK3id,
                    ItemId = c_mes_inv_item_barcodes.ItemId,
                    DepotCode = c_mes_depots.DepotCode,
                    DepotId = c_depot_code.ToString(),
                    itemDabid = c_mes_inv_item_barcodes.AboutGuid.ToString()
                }).IgnoreColumns(true).ExecuteCommand();
            else
                // 存在时更新数量
                db.Updateable<MesInvItemInCItems>()
                    .SetColumns(it => new MesInvItemInCItems
                    {
                        Quantity = SqlFunc.IsNull(it.Quantity, 0) + c_mes_inv_item_barcodes.Quantity // 确保 Quantity 不为 null
                    })
                .Where(it =>
                       it.ItemInId == c_id &&
                                it.ItemId == C_MES_ITEM_TBL_DETAIL.Tld009 &&
                                it.DepotId == c_depot_code.ToString())
                    //.IgnoreColumns(true) // 保留 IgnoreColumns
                    .ExecuteCommand();
            // 插入入库单明细
            totalResult += db.Insertable(new MesInvItemInCDetails
@@ -395,7 +502,11 @@
                UrgentFlag = c_mes_inv_item_barcodes.UrgentFlag,
                BoardStyle = c_mes_inv_item_barcodes.BoardStyle,
                TaskNo = c_mes_inv_item_barcodes.TaskNo,
                RbillNo = C_MES_ITEM_TBL.Tbl002
                RbillNo = C_MES_ITEM_TBL.Tbl002,
                ReceiveOrgId = c_mes_depots.FSubsidiary,
                EbelnK3id = c_mes_inv_item_barcodes.EbelnK3id,
                LineK3id = c_mes_inv_item_barcodes.LineK3id,
                Ischeck = true,
            }).IgnoreColumns(true).ExecuteCommand();
            // 插入业务记录
@@ -437,9 +548,9 @@
                ItemNo = c_mes_inv_item_barcodes.ItemNo,
                LotNo = c_mes_inv_item_barcodes.LotNo,
                Quantity = c_mes_inv_item_barcodes.Quantity,
                EpFlag = c_mes_inv_item_barcodes.EpFlag.Value
                    ? (byte)1
                    : (byte)0,
                //EpFlag = c_mes_inv_item_barcodes.EpFlag.Value
                //    ? (byte)1
                //    : (byte)0,
                DepotId = c_mes_depots.DepotId,
                DepotsCode = c_mes_depots.DepotCode,
                DepotSectionsCode = p_section_code,
@@ -449,7 +560,13 @@
                WorkNo = c_mes_inv_item_barcodes.WorkNo,
                WorkLine = c_mes_inv_item_barcodes.WorkLine,
                SuppNo = c_mes_inv_item_barcodes.SuppNo,
                ItemId = c_mes_inv_item_barcodes.ItemId
                ItemId = c_mes_inv_item_barcodes.ItemId,
                BillNo = c_mes_inv_item_barcodes.BillNo,
                //DepotId = Convert.ToInt32(c_depot_code),
                OwnerId = WWCAB.Owner,
                OwnerType = WWCAB.OwnerType,
                StockOrgId = c_mes_depots.FSubsidiary,
                IndepUserCode = c_user
            }).IgnoreColumns(true).ExecuteCommand();
            // 根据退料类型(良品退料、来料不良退料、作业不良退料)更新相关数据
@@ -506,9 +623,9 @@
                                 (int)c_mes_inv_item_barcodes.Quantity // 增加已退数量
                    })
                    .Where(it => it.Tlmid == C_MES_ITEM_TBL.Id
                                 && it.Tld009 == c_mes_inv_item_barcodes.ItemId
                                 && it.Tld010 ==
                                 c_mes_inv_item_barcodes.WorkLine)
                                 && it.Tld009 == c_mes_inv_item_barcodes.ItemId)
                                 //&& it.Tld010 ==
                                 //c_mes_inv_item_barcodes.WorkLine)
                    .ExecuteCommand();
            }
            // 作业不良退料 - 更新工单表和退料单明细表
@@ -540,9 +657,9 @@
                                 (int)c_mes_inv_item_barcodes.Quantity // 增加已退数量
                    })
                    .Where(it => it.Tlmid == C_MES_ITEM_TBL.Id
                                 && it.Tld009 == c_mes_inv_item_barcodes.ItemId
                                 && it.Tld010 ==
                                 c_mes_inv_item_barcodes.WorkLine)
                                 && it.Tld009 == c_mes_inv_item_barcodes.ItemId)
                                 //&& it.Tld010 ==
                                 //c_mes_inv_item_barcodes.WorkLine)
                    .ExecuteCommand();
            }
@@ -578,6 +695,11 @@
                throw new Exception(
                    $"关键数据插入失败,预期至少{minimumExpectedOperations}个操作,实际执行{totalResult}个操作");
            // 创建 插入日志
            var logService = new LogService();
            var LogMsg = "[PDA]委外退料。条码【" + query.barcode + "】 退料单号【" + c_bill_no + "】";
            logService.CreateLog(db, query.userName, wwgd.Id.ToString(), "WW_GD", LogMsg, wwgd.Daa001);
            return totalResult;
        });
@@ -588,11 +710,10 @@
    #endregion
    #region 委外补料
    /// <summary>
    /// 委外工单退料扫码
    /// 委外工单补料扫码
    ///     扫描条码  prc_rf_pda_scan_zout_barcode3
    /// </summary>
    /// <param name="query">查询参数</param>
@@ -653,7 +774,7 @@
        // 获取补料单明细并校验
        var blDetail = Db.Queryable<MesItemBlDetail>()
            .Where(b =>
                b.Mid == mesItemBl.Id && b.Bld012 == stockBarcode.ItemId)
                b.Mid == mesItemBl.Id && b.Bld012 == stockBarcode.ItemId && b.Bld007 > b.Bld008)
            .First();
        if (blDetail == null)
@@ -669,6 +790,11 @@
            .Where(a => a.Daa001 == query.billNo)
            .First();
        // 检查工单信息
        var WWRWD = Db.Queryable<ProductionOrder>()
            .Where(a => a.OrderNo == wwgd.Daa014)
            .First();
        if (wwgd == null)
            throw new Exception($"工单 {query.billNo} 不存在,请确认!");
@@ -679,6 +805,11 @@
        if (womdab == null)
            throw new Exception($"备料明细不存在此物料 {stockBarcode.ItemNo} 请确认!");
        var depots = Db.Queryable<MesDepots>()
            .Where(t => t.DepotId == stockBarcode.DepotId)
            .First();
        if (stockBarcode.Quantity > quantity)
        {
@@ -708,13 +839,24 @@
        // 开启事务处理
        var success = UseTransaction(db =>
        {
            //query.Type = "委外补料";
            var outNoType = "WWBL(委外补料)";
            if (query.Type == "委外补料")
            {
                outNoType = "WWBL(委外补料)";
            }
            else
            {
                outNoType = "WWCL(委外超领)";
            }
            //outNoType = "WWBL(委外补料)";
            // 获取或创建出库单
            var outId = Guid.NewGuid();
            var outNo = BillNo.GetBillNo("BL(工单补料)");
            var outNo = BillNo.GetBillNo(outNoType);
            var existingOut = db.Queryable<MesInvItemOuts>()
                .Where(a => a.BbillNo == query.blNo
                            && a.DepotCode == womdab.Dab017
                .Where(a => a.TaskNo == query.blNo
                            && a.DepotId == stockBarcode.DepotId
                            && a.OutDate.Value.Date.ToString("yyyy-MM-dd") ==
                            DateTime.Now.Date.ToString("yyyy-MM-dd")
                            && a.BillTypeId == 200
@@ -742,33 +884,36 @@
                    BillTypeId = 200,
                    TransactionNo = 209,
                    Remark = mesItemBl.Bl007,
                    DepotCode = womdab.Dab017,
                    OutPart = wwgd.Daa013.ToString(),
                    DepotCode = depots.DepotCode,
                    OutPart = wwgd.DepartId.ToString(),
                    OutType = query.Type,
                    FType = 0,
                    Factory = stockBarcode.Factory,
                    Company = stockBarcode.Company,
                    // WorkNo = wwgd.Daa021,
                    // BoardItem = wwgd.Daa002,
                    WorkNo = WWRWD.ErpProductionOrderNo,
                    BoardItem = wwgd.Daa003.ToString(),
                    PbillNo = wwgd.Daa001,
                    OutDate = DateTime.Now,
                    Status = 0,
                    BbillNo = query.blNo
                    DepotId = stockBarcode.DepotId,
                    THORGID = stockBarcode.StockOrgId,
                    //BbillNo = query.billNo
                }).IgnoreColumns(true).ExecuteCommand();
            }
            // 检查并更新出库单物料明细
            var itemCount = db.Queryable<MesInvItemOutItems>()
                .Where(i =>
                    i.ItemOutId == outId && i.ItemId == stockBarcode.ItemId)
                    i.ItemOutId == outId && i.ItemId == stockBarcode.ItemId && i.ItemOutId == outId && i.DepotId == stockBarcode.DepotsId.ToString())
                .Count();
            if (itemCount > 0)
                // 更新已存在的物料明细数量
                db.Updateable<MesInvItemOutItems>()
                    .SetColumns(i =>
                        i.Quantity == i.Quantity + stockBarcode.Quantity)
                        i.TlQty == i.TlQty + stockBarcode.Quantity)
                    .Where(i =>
                        i.ItemOutId == outId && i.ItemId == stockBarcode.ItemId)
                        i.ItemOutId == outId && i.ItemId == stockBarcode.ItemId && i.ItemOutId == outId && i.DepotId == stockBarcode.DepotsId.ToString())
                    .ExecuteCommand();
            else
                // 插入新的物料明细记录
@@ -778,21 +923,25 @@
                    ItemOutId = outId,
                    ItemNo = blDetail.Bld002,
                    Quantity = stockBarcode.Quantity,
                    TlQty = stockBarcode.Quantity,
                    CreateBy = query.userName,
                    CreateDate = DateTime.Now,
                    LastupdateBy = query.userName,
                    LastupdateDate = DateTime.Now,
                    Factory = stockBarcode.Factory,
                    Company = stockBarcode.Company,
                    DepotCode = womdab.Dab017,
                    DepotCode = depots.DepotCode,
                    TaskNo = query.blNo,
                    // WorkNo = wwgd.Daa021,
                    WorkNo = WWRWD.ErpProductionOrderNo,
                    WorkLine = blDetail.Bld013,
                    ErpItemNo = womdab.Dab003.ToString(),
                    ErpId = womdab.Eid,
                    ErpAutoid = womdab.Erpid,
                    PbillNo = query.billNo,
                    ItemId = blDetail.Bld012
                    ItemId = blDetail.Bld012,
                    DepotId = stockBarcode.DepotId.ToString(),
                    ItemDabid = blDetail.Id,
                    //AboutGuid = womdab.Id
                    // Unit = blDetail.Bld009,
                    // DepotId = (int)stockBarcode.DepotsId
                }).IgnoreColumns(true).ExecuteCommand();
@@ -811,7 +960,7 @@
                CreateDate = DateTime.Now,
                LastupdateBy = query.userName,
                LastupdateDate = DateTime.Now,
                DepotCode = stockBarcode.DepotsCode,
                DepotCode = depots.DepotCode,
                DepotSectionCode = stockBarcode.DepotSectionsCode,
                Remark = blDetail.Bld010,
                Factory = stockBarcode.Factory,
@@ -825,7 +974,7 @@
                PbillNo = query.billNo,
                ItemId = blDetail.Bld012,
                Unit = blDetail.Bld009,
                DepotId = (int)stockBarcode.DepotsId,
                DepotId = (int)stockBarcode.DepotId,
                EbelnK3id = womdab.Eid,
                LineK3id = womdab.Erpid
            }).IgnoreColumns(true).ExecuteCommand();
@@ -836,7 +985,7 @@
                Guid = Guid.NewGuid(),
                Status = 1,
                BillTypeId = 200, // p_bill_type_id
                TransactionCode = "210", // p_transaction_no
                TransactionCode = "209", // p_transaction_no
                BusinessType = -1,
                ItemBarcode = stockBarcode.ItemBarcode,
                ItemNo = stockBarcode.ItemNo,
@@ -871,6 +1020,7 @@
                })
                .Where(it => it.Id == womdab.Id && it.Dab003 == womdab.Dab003)
                .ExecuteCommand();
            // 更新补料单明细已补数量
            db.Updateable<MesItemBlDetail>()
@@ -918,6 +1068,11 @@
                    })
                    .Where(it => it.Id == mesItemBl.Id)
                    .ExecuteCommand();
            // 创建 插入日志
            var logService = new LogService();
            var LogMsg = "[PDA]"+query.Type + "。条码【" +query.barcode+"】 数量【"+ stockBarcode.Quantity.ToString() + "】 出库单号【"+ outNo +"】";
            logService.CreateLog(db,query.userName,wwgd.Id.ToString(), "WW_GD", LogMsg,wwgd.Daa001);
            return 1;
        });
@@ -1005,7 +1160,7 @@
                    .Where(s => s.Id == stockBarcode.ItemId).First();
                // 生成新条码号
                newBarcode = BillNo.GetBillNo("TMBH(条码编号)", mesItems.ItemNo);
                newBarcode = BillNo.GetBillNo("TM(条码)", mesItems.ItemNo);
                // 写入新条码
                executeCommand += db.Insertable(new MesInvItemBarcodes
@@ -1096,7 +1251,7 @@
                    Guid = Guid.NewGuid(),
                    Status = 1,
                    BillTypeId = 200, // p_bill_type_id
                    TransactionCode = "209", // p_transaction_no
                    TransactionCode = "220", // p_transaction_no
                    BusinessType = -1,
                    ItemBarcode = newBarcode,
                    ItemNo = stockBarcode.ItemNo,
@@ -1195,7 +1350,7 @@
                            && a.OutDate.Value.Date.ToString("yyyy-MM-dd") ==
                            DateTime.Now.Date.ToString("yyyy-MM-dd")
                            && a.BillTypeId == 200
                            && a.TransactionNo == 209
                            && a.TransactionNo == 220
                            && a.Status == 0)
                .First();
@@ -1216,7 +1371,7 @@
                    LastupdateBy = query.userName,
                    LastupdateDate = DateTime.Now,
                    BillTypeId = 200,
                    TransactionNo = 209,
                    TransactionNo = 220,
                    Remark = mesItemBl.Bl007,
                    DepotCode = womdab.Dab017,
                    OutPart = womdaa.Daa013.ToString(),