xwt
2025-10-30 dabfdd9dbf0364b1134daaad86af7e13f6437295
StandardInterface/MES.Service/service/QC/LljService.cs
@@ -89,7 +89,9 @@
                    // 添加评审状态
                    PSZT = a.PSZT,
                    // 添加检验项目维护状态
                    Jyxm = a.Jyxm
                    Jyxm = a.Jyxm,
                    // 添加版本号(用于FTP路径)
                    Fversion = a.Fversion
                })
                .OrderBy("IQC_DATE DESC")
                .OrderBy("CASE WHEN EMERGENCY = 1 THEN 0 ELSE 1 END")
@@ -164,7 +166,9 @@
                    // 添加评审状态
                    PSZT = a.PSZT,
                    // 添加检验项目维护状态
                    Jyxm = a.Jyxm
                    Jyxm = a.Jyxm,
                    // 添加版本号(用于FTP路径)
                    Fversion = a.Fversion
                })
                .OrderBy("IQC_DATE DESC")
                .OrderBy("CASE WHEN EMERGENCY = 1 THEN 0 ELSE 1 END")
@@ -504,7 +508,13 @@
        return input.Substring(startIndex + 1, length);
    }
    public List<QamftpDto> GetAttachments(string ItemNo)
    /// <summary>
    /// 获取附件信息
    /// </summary>
    /// <param name="ItemNo">物料编码</param>
    /// <param name="fversion">版本号(可选,用于过滤)</param>
    /// <returns>附件列表</returns>
    public List<QamftpDto> GetAttachments(string ItemNo, string fversion = null)
    {
        //if (string.IsNullOrEmpty(ItemNo))
        //{
@@ -514,8 +524,17 @@
        var db = SqlSugarHelper.GetInstance();
        try
        {
            return db.Queryable<MesQamftp>()
            var query = db.Queryable<MesQamftp>()
                .Where(x => x.ItemNo == ItemNo)
                .Where(x => x.Ftype == "来料检");  // 添加FTYPE = '来料检'的限制
            // 如果传入了fversion,则按Fversion过滤
            if (!string.IsNullOrEmpty(fversion))
            {
                query = query.Where(x => x.Fversion == fversion);
            }
            return query
                .OrderBy(x => x.Fdate, OrderByType.Desc)
                // .ThenBy(x => x.CreateDate, OrderByType.Desc)
                .Select(x => new QamftpDto
@@ -543,7 +562,7 @@
        }
    }
    public byte[] GetFtpFile(string itemNo, string fileName, string ftpServer)
    public byte[] GetFtpFile(string itemNo, string fileName, string ftpServer, string fversion = null)
    {
        // 参数验证
        if (string.IsNullOrEmpty(itemNo) || string.IsNullOrEmpty(fileName) || string.IsNullOrEmpty(ftpServer))
@@ -557,8 +576,16 @@
        // 标准化FTP服务器地址
        string normalizedServer = NormalizeFtpServer(ftpServer);
        
        // 构建FTP文件路径
        string ftpPath = $"{normalizedServer}/IQC/{itemNo}/{fileName}";
        // 构建FTP文件路径 - 来料检使用IQC目录,使用fversion作为子目录
        string ftpPath;
        if (!string.IsNullOrEmpty(fversion))
        {
            ftpPath = $"{normalizedServer}/IQC/{itemNo}/{fversion}/{fileName}";
        }
        else
        {
            ftpPath = $"{normalizedServer}/IQC/{itemNo}/{fileName}";
        }
        
        try
        {
@@ -1289,7 +1316,6 @@
                    BillNo = b.BillNo         // 到货单号
                })
                .ToList();
            // 移除到货单号校验,直接返回查询结果
            return materialInfo;
        }
@@ -1298,7 +1324,6 @@
            throw new Exception($"查询物料信息失败: {ex.Message}");
        }
    }
    /// <summary>
    /// 查询破坏实验记录是否存在
    /// </summary>
@@ -1313,7 +1338,7 @@
            var count = db.Queryable<MesInvPhsy>()
                .Where(x => x.BillNo == billNo && x.ReleaseNo == releaseNo)
                .Count();
            return count > 0;
        }
        catch (Exception ex)
@@ -1321,7 +1346,6 @@
            throw new Exception($"查询破坏实验记录失败: {ex.Message}");
        }
    }
    /// <summary>
    /// 获取破坏实验记录详细信息
    /// </summary>
@@ -1337,22 +1361,20 @@
            var phsyRecords = db.Queryable<MesInvPhsy>()
                .Where(x => x.BillNo == billNo && x.ReleaseNo == releaseNo)
                .ToList();
            var result = new List<PhsyRecordInfoDto>();
            foreach (var record in phsyRecords)
            {
                // 尝试通过条码查询物料信息
                var materialInfo = db.Queryable<MesInvItemBarcodes>()
                    .LeftJoin<MesItems>((b, m) => b.ItemId == m.Id)
                    .Where((b, m) => b.ItemBarcode == record.ItemBarcode)
                    .Select((b, m) => new {
                    .Select((b, m) => new {
                        ItemNo = b.ItemNo,
                        ItemName = m.ItemName,
                        ItemModel = m.ItemModel
                    })
                    .First();
                var dto = new PhsyRecordInfoDto
                {
                    ItemBarcode = record.ItemBarcode,
@@ -1364,10 +1386,10 @@
                    Cqty = record.Cqty,
                    CreateDate = record.CreateDate
                };
                result.Add(dto);
            }
            return result;
        }
        catch (Exception ex)
@@ -1375,7 +1397,6 @@
            throw new Exception($"获取破坏实验记录信息失败: {ex.Message}");
        }
    }
    /// <summary>
    /// 调用破坏实验存储过程
    /// </summary>
@@ -1400,19 +1421,16 @@
            var inputParam5 = new SugarParameter("P_LX", lx, DbType.Int32, ParameterDirection.Input);
            var inputParam6 = new SugarParameter("ITEM_ID", itemId ?? 0, DbType.Decimal, ParameterDirection.Input);
            var inputParam7 = new SugarParameter("P_RELEASE_NO", releaseNo, DbType.String, ParameterDirection.Input);
            // 定义输出参数
            var outputResult = new SugarParameter("PO_RESULT", null, DbType.Int32, ParameterDirection.Output);
            var outputMessage = new SugarParameter("PO_MSG", null, DbType.String, ParameterDirection.Output, 4000);
            // 使用SqlSugar执行存储过程
            db.Ado.ExecuteCommand("BEGIN PRC_INV_PHSYUPDATE(:P_ITEM_BARCODE, :P_YQTY, :P_CQTY, :P_BILL_NO, :P_LX, :ITEM_ID, :P_RELEASE_NO, :PO_RESULT, :PO_MSG); END;",
            db.Ado.ExecuteCommand("BEGIN PRC_INV_PHSYUPDATE(:P_ITEM_BARCODE, :P_YQTY, :P_CQTY, :P_BILL_NO, :P_LX, :ITEM_ID, :P_RELEASE_NO, :PO_RESULT, :PO_MSG); END;",
                inputParam1, inputParam2, inputParam3, inputParam4, inputParam5, inputParam6, inputParam7, outputResult, outputMessage);
            // 获取输出参数的值
            var result = outputResult.Value == null ? 1 : Convert.ToInt32(outputResult.Value);
            var message = outputMessage.Value?.ToString() ?? "";
            return (result, message);
        }
        catch (Exception ex)
@@ -1420,7 +1438,6 @@
            return (1, $"调用存储过程失败: {ex.Message}");
        }
    }
    /// <summary>
    /// 设置堵穴信息
    /// </summary>
@@ -1439,30 +1456,25 @@
                .Where(s => !string.IsNullOrEmpty(s))
                .Select(s => int.Parse(s))
                .ToList();
            // 获取检验项目信息
            var item = db.Queryable<MesQaItemsDetectDetail5>()
                .Where(x => x.Id == itemId && x.ReleaseNo == releaseNo)
                .First();
            if (item == null)
            {
                return (1, "检验项目不存在");
            }
            // 解析开穴数
            var holeCount = ParseHoleCount(item.FcheckItem);
            if (holeCount == 0)
            {
                return (1, "该检验项目没有穴数信息");
            }
            // 验证堵穴数量不能大于等于开穴数
            if (blockedHolesList.Count >= holeCount)
            {
                return (1, $"堵穴数量不能大于等于开穴数({holeCount})");
            }
            // 验证堵穴号是否在有效范围内
            foreach (var hole in blockedHolesList)
            {
@@ -1471,10 +1483,8 @@
                    return (1, $"堵穴号必须在1-{holeCount}之间");
                }
            }
            // 计算新的检验数量
            var newCheckQyt = item.CheckQyt - (item.CheckQyt / holeCount) * blockedHolesList.Count;
            // 更新数据库
            var result = SqlSugarHelper.UseTransactionWithOracle(db =>
            {
@@ -1484,7 +1494,6 @@
                    .Where(x => x.Id == itemId && x.ReleaseNo == releaseNo)
                    .ExecuteCommand();
            });
            if (result > 0)
            {
                return (0, "堵穴设置成功");
@@ -1499,7 +1508,6 @@
            return (1, $"设置堵穴失败: {ex.Message}");
        }
    }
    /// <summary>
    /// 解析检验项目名称中的穴数
    /// </summary>
@@ -1509,11 +1517,9 @@
    {
        if (string.IsNullOrEmpty(checkItemName))
            return 0;
        // 匹配格式:尺寸检查(5穴)或 尺寸检查(5穴)
        var match = System.Text.RegularExpressions.Regex.Match(checkItemName, @"[((](\d+)穴[))]");
        return match.Success ? int.Parse(match.Groups[1].Value) : 0;
    }
}