CRZ
22 小时以前 85ba3b8ad0bead0baf95d4623f4804c404721bac
MES.Service/service/WomcaaManager.cs
@@ -219,11 +219,17 @@
    {
        var womcabList = new List<Womcab>();
        foreach (var dto in dtoList)
        // ========== 修正:按 单号+单别+物料编号 去重,避免WOMDAB重复 ==========
        // 如果有重复记录,取最后一条
        var distinctList = dtoList
            .GroupBy(x => new { x.FBillNo, x.FBillNoType, x.FMaterialID2 })
            .Select(g => g.Last())
            .ToList();
        foreach (var dto in distinctList)
        {
            var womcab = new Womcab
            {
                Cab001 = dto.FBillNo,
                Cab002 = dto.FBillNoType,
                Cab003 = dto.FMaterialID2,
@@ -242,10 +248,7 @@
                Cab014 = dto.FIsKeyItem,
                Numerator = dto.FNumerator,
                Denominator = dto.FDenominator
            };
            womcabList.Add(womcab);
        }
@@ -267,20 +270,8 @@
        return UseTransaction(db =>
        {
            // 删除主表数据
            var deleteMain = db.Deleteable<Womcaa>()
                .Where(it => it.Caa001 == data.FBillNo && it.SrcBillType == data.FBillTypeID)
                .ExecuteCommand() > 0;
            // 删除子表数据
            var deleteDetail = db.Deleteable<Womcab>()
                .Where(it => it.Cab001 == data.FBillNo && it.Cab002 == data.FBillTypeID)
                .ExecuteCommand() > 0;
            if (!deleteMain || !deleteDetail)
                throw new Exception("删除失败:主表或子表记录不存在");
            // 调用存储过程进行后续处理
            // ========== 修正:先调用存储过程(此时WOMCAB数据还在),再删除WOMCAA和WOMCAB ==========
            // 存储过程PRC_DELETE_DAA需要读取WOMCAB数据来删除对应的WOMDAB
            var inputParam1 = new SugarParameter("P_WORK_NO", data.FBillNo);
            var inputParam2 = new SugarParameter("P_WORK_TYPE", data.FBillTypeID);
            var outParam1 = new SugarParameter("C_RESULT", null, true); // 输出参数
@@ -298,9 +289,19 @@
                //存储过程失败则事务进行回滚
                db.Ado.RollbackTran();
                throw new Exception(message);
            }
            // 存储过程执行成功后,再删除WOMCAA和WOMCAB
            // 删除子表数据
            db.Deleteable<Womcab>()
                .Where(it => it.Cab001 == data.FBillNo && it.Cab002 == data.FBillTypeID)
                .ExecuteCommand();
            // 删除主表数据
            db.Deleteable<Womcaa>()
                .Where(it => it.Caa001 == data.FBillNo && it.SrcBillType == data.FBillTypeID)
                .ExecuteCommand();
            return 1;
        }) > 0;
    }