XJ,SJ,RKJ检验项目序号,LLJ单个检验项目FTP附件信息
| | |
| | | public string? searchField { get; set; } // 搜索字段名 |
| | | [SugarColumn(IsIgnore = true)] |
| | | public string? SearchValue { get; set; } // 搜索值 |
| | | |
| | | /// <summary> |
| | | /// 车间ID,用于QC筛选 |
| | | /// </summary> |
| | | [SugarColumn(IsIgnore = true)] |
| | | public string? departmentId { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 线体ID,用于QC筛选 |
| | | /// </summary> |
| | | [SugarColumn(IsIgnore = true)] |
| | | public string? lineId { get; set; } |
| | | } |
| | |
| | | /// 搜索字段名,用于指定搜索哪个字段 |
| | | /// </summary> |
| | | public string? searchField { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 车间ID,用于QC筛选 |
| | | /// </summary> |
| | | public string? departmentId { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 线体ID,用于QC筛选 |
| | | /// </summary> |
| | | public string? lineId { get; set; } |
| | | |
| | | } |
| | |
| | | [Column("SNUM")] |
| | | [SugarColumn(ColumnName = "SNUM")] |
| | | public decimal? Snum { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 顺序 |
| | | /// </summary> |
| | | [Column("FORDER")] |
| | | [SugarColumn(ColumnName = "FORDER")] |
| | | public decimal? Forder { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 穴号信息(用于前端显示) |
| | |
| | | /// </summary> |
| | | [SugarColumn(IsIgnore = true)] |
| | | public string? ItemNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 顺序 |
| | | /// </summary> |
| | | [Column("FORDER")] |
| | | [SugarColumn(ColumnName = "FORDER")] |
| | | public decimal? Forder { get; set; } |
| | | } |
| | |
| | | /// </summary> |
| | | [SugarColumn(IsIgnore = true)] |
| | | public string? ItemNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 顺序 |
| | | /// </summary> |
| | | [Column("FORDER")] |
| | | [SugarColumn(ColumnName = "FORDER")] |
| | | public decimal? Forder { get; set; } |
| | | } |
| | |
| | | }); |
| | | return mesQsImages; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取QC车间列表(根据视图 V_MES_QC_CJ) |
| | | /// </summary> |
| | | /// <returns>车间列表</returns> |
| | | public List<dynamic> GetQCDepartments() |
| | | { |
| | | var db = SqlSugarHelper.GetInstance(); |
| | | var sql = @" |
| | | SELECT |
| | | T.DEPARTMENTNAME as departmentname, |
| | | T.DEPARTMENTID as departmentid |
| | | FROM SYS_DEPARTMENT T |
| | | WHERE T.DEPARTMENTID IN ( |
| | | 2951904,2951874,2973564,3131720,3252567,3306857,3335722,2306534,2670262, |
| | | 2365021,2365022,2749927,2306535,2558979,2558980,2558981,2558982,1606194, |
| | | 1608020,1608021,1606193,1608022,1638037,1682634,1802281,1802278,1802279, |
| | | 1802280,1999190,1999191,2272979,2513368,2513369,2513370,2513371,2558971, |
| | | 2558972,2558973,2558974,2558975,2558976,2558977,2749970,2749946,2749947, |
| | | 2749948,2670253,2670258,2670260,2513372,2513373,2513374,2513375,2513376, |
| | | 2670261,139517,139518,139519,209814,211639,221640,378794,440720,441918, |
| | | 441919,502188,507542,507545,507546,139524 |
| | | ) |
| | | ORDER BY T.DEPARTMENTNAME"; |
| | | |
| | | return db.Ado.SqlQuery<dynamic>(sql); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取QC线体列表(根据车间ID筛选,基于视图 V_MES_QC_XT) |
| | | /// </summary> |
| | | /// <param name="departmentId">车间ID,如果为空则返回所有QC线体</param> |
| | | /// <returns>线体列表</returns> |
| | | public List<MesLine> GetQCLines(string? departmentId) |
| | | { |
| | | var db = SqlSugarHelper.GetInstance(); |
| | | |
| | | if (string.IsNullOrEmpty(departmentId)) |
| | | { |
| | | // 如果没有指定车间,返回所有QC线体 |
| | | var sql = @" |
| | | SELECT E.LINE_NO as LineNo, E.LINE_NAME as LineName, E.DEPOT_ID as DepotId |
| | | FROM MES_LINE E |
| | | LEFT JOIN ( |
| | | SELECT T.DEPARTMENTID |
| | | FROM SYS_DEPARTMENT T |
| | | WHERE T.DEPARTMENTID IN ( |
| | | 2951904,2951874,2973564,3131720,3252567,3306857,3335722,2306534,2670262, |
| | | 2365021,2365022,2749927,2306535,2558979,2558980,2558981,2558982,1606194, |
| | | 1608020,1608021,1606193,1608022,1638037,1682634,1802281,1802278,1802279, |
| | | 1802280,1999190,1999191,2272979,2513368,2513369,2513370,2513371,2558971, |
| | | 2558972,2558973,2558974,2558975,2558976,2558977,2749970,2749946,2749947, |
| | | 2749948,2670253,2670258,2670260,2513372,2513373,2513374,2513375,2513376, |
| | | 2670261,139517,139518,139519,209814,211639,221640,378794,440720,441918, |
| | | 441919,502188,507542,507545,507546,139524 |
| | | ) |
| | | ) C ON C.DEPARTMENTID = E.DEPOT_ID |
| | | WHERE C.DEPARTMENTID IS NOT NULL |
| | | ORDER BY E.LINE_NO DESC"; |
| | | |
| | | return db.Ado.SqlQuery<MesLine>(sql); |
| | | } |
| | | else |
| | | { |
| | | // 如果指定了车间,只返回该车间下的线体 |
| | | return db.Queryable<MesLine>() |
| | | .Where(e => e.DepotId.ToString() == departmentId) |
| | | .OrderBy(e => e.LineNo, SqlSugar.OrderByType.Desc) |
| | | .Select(e => new MesLine |
| | | { |
| | | LineNo = e.LineNo, |
| | | LineName = e.LineName, |
| | | DepotId = e.DepotId |
| | | }) |
| | | .ToList(); |
| | | } |
| | | } |
| | | } |
| | |
| | | // 添加评审状态 |
| | | 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") |
| | |
| | | // 添加评审状态 |
| | | 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") |
| | |
| | | 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)) |
| | | //{ |
| | |
| | | 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 |
| | |
| | | } |
| | | } |
| | | |
| | | 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)) |
| | |
| | | // 标准化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 |
| | | { |
| | |
| | | a.FcheckLevel, |
| | | a.FacLevel, |
| | | a.QsCode, |
| | | a.QsName |
| | | a.QsName, |
| | | a.Forder |
| | | }).Select((a, b) => new QsItemOqcItem |
| | | { |
| | | ProjName = a.ProjName, |
| | |
| | | FacLevel = a.FacLevel, |
| | | QsCode = a.QsCode, |
| | | QsName = a.QsName, |
| | | Forder = a.Forder, |
| | | isCheck = SqlFunc.AggregateCount(b.Id), |
| | | Result = SqlFunc.AggregateCount(b.Id) == 0 ? "未完成" : |
| | | a.IsPass == 1 ? "合格" : "不合格" |
| | | }).OrderBy("result desc").ToList(); |
| | | }).OrderBy("FORDER").ToList(); |
| | | } |
| | | |
| | | public dynamic save(RKJDto rkjDto) |
| | |
| | | |
| | | |
| | | return db |
| | | .Queryable<QsItemOqcReq, Womdaa, MesItems>((a, da, b) => |
| | | .Queryable<QsItemOqcReq, Womdaa, MesItems, MesLine>((a, da, b, m) => |
| | | new JoinQueryInfos( |
| | | JoinType.Left, da.Daa001 == a.BillNo, |
| | | JoinType.Left, a.ItemId == b.Id |
| | | JoinType.Left, a.ItemId == b.Id, |
| | | JoinType.Left, da.Daa015 == m.LineNo |
| | | )) |
| | | .WhereIF(lineNo != null && lineNo.Length > 0, |
| | | (a, da, b) => lineNo.Contains(da.Daa015)) |
| | | (a, da, b, m) => lineNo.Contains(da.Daa015)) |
| | | // 添加QC筛选条件:车间和线体 |
| | | .WhereIF(!string.IsNullOrEmpty(queryObj.departmentId), |
| | | (a, da, b, m) => m.DepotId.ToString() == queryObj.departmentId) |
| | | .WhereIF(!string.IsNullOrEmpty(queryObj.lineId), |
| | | (a, da, b, m) => m.LineNo == queryObj.lineId) |
| | | .WhereIF( |
| | | StringUtil.IsNotNullOrEmpty(queryObj.result) && |
| | | "未完成".Equals(queryObj.result), |
| | | (a, da, b) => a.FcheckResu == null || a.FcheckResu == "") |
| | | (a, da, b, m) => a.FcheckResu == null || a.FcheckResu == "") |
| | | .WhereIF( |
| | | StringUtil.IsNotNullOrEmpty(queryObj.result) && |
| | | !"未完成".Equals(queryObj.result), |
| | | (a, da, b) => a.FcheckResu != null && a.FcheckResu != "") |
| | | .WhereIF(id > 0, (a, da, b) => a.Id == id) |
| | | (a, da, b, m) => a.FcheckResu != null && a.FcheckResu != "") |
| | | .WhereIF(id > 0, (a, da, b, m) => a.Id == id) |
| | | // 添加fsubmit字段过滤逻辑 - 只有在明确指定fsubmit参数时才过滤,且没有传递id时才过滤 |
| | | .WhereIF( |
| | | id <= 0 && StringUtil.IsNotNullOrEmpty(queryObj.fsubmit) && queryObj.fsubmit == "1", |
| | | (a, da, b) => a.Fsubmit == 1) |
| | | (a, da, b, m) => a.Fsubmit == 1) |
| | | .WhereIF( |
| | | id <= 0 && StringUtil.IsNotNullOrEmpty(queryObj.fsubmit) && queryObj.fsubmit == "0", |
| | | (a, da, b) => a.Fsubmit == 0 || a.Fsubmit == null) |
| | | (a, da, b, m) => a.Fsubmit == 0 || a.Fsubmit == null) |
| | | // 添加搜索条件 - 根据选择的搜索字段进行精确搜索 |
| | | .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && !string.IsNullOrEmpty(queryObj.searchField) && queryObj.searchField == "billNo", // 工单 |
| | | (a, da, b) => a.BillNo.Contains(queryObj.SearchValue)) |
| | | (a, da, b, m) => a.BillNo.Contains(queryObj.SearchValue)) |
| | | .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && !string.IsNullOrEmpty(queryObj.searchField) && queryObj.searchField == "releaseNo", // 检验单号 |
| | | (a, da, b) => a.ReleaseNo.Contains(queryObj.SearchValue)) |
| | | (a, da, b, m) => a.ReleaseNo.Contains(queryObj.SearchValue)) |
| | | .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && !string.IsNullOrEmpty(queryObj.searchField) && queryObj.searchField == "daa015", // 产线 |
| | | (a, da, b) => da.Daa015.Contains(queryObj.SearchValue)) |
| | | (a, da, b, m) => da.Daa015.Contains(queryObj.SearchValue)) |
| | | .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && !string.IsNullOrEmpty(queryObj.searchField) && queryObj.searchField == "itemNo", // 物料编码 |
| | | (a, da, b) => a.ItemNo.Contains(queryObj.SearchValue)) |
| | | (a, da, b, m) => a.ItemNo.Contains(queryObj.SearchValue)) |
| | | .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && !string.IsNullOrEmpty(queryObj.searchField) && queryObj.searchField == "itemName", // 物料名称 |
| | | (a, da, b) => b.ItemName.Contains(queryObj.SearchValue)) |
| | | (a, da, b, m) => b.ItemName.Contains(queryObj.SearchValue)) |
| | | // 为了兼容旧版本,如果没有传递 searchField,使用原来的查询逻辑 |
| | | .WhereIF(string.IsNullOrEmpty(queryObj.searchField) && !string.IsNullOrEmpty(queryObj.SearchValue), |
| | | (a, da, b) => |
| | | (a, da, b, m) => |
| | | a.ItemNo.Contains(queryObj.SearchValue) || |
| | | b.ItemName.Contains(queryObj.SearchValue) || |
| | | a.BillNo.Contains(queryObj.SearchValue) || |
| | | a.ReleaseNo.Contains(queryObj.SearchValue) || |
| | | da.Daa015.Contains(queryObj.SearchValue)) |
| | | .Select((a, da, b) => new QsItemOqcReq |
| | | .Select((a, da, b, m) => new QsItemOqcReq |
| | | { |
| | | Id = a.Id, |
| | | ReleaseNo = a.ReleaseNo, |
| | |
| | | if (StringUtil.IsNotNullOrEmpty(queryObj.StatusUser)) |
| | | lineNo = _baseService.getUserLineNo(queryObj.StatusUser); |
| | | |
| | | var query = db.Queryable<SJPageResult>() |
| | | .WhereIF(lineNo != null && lineNo.Length > 0, |
| | | a => lineNo.Contains(a.line)) |
| | | .WhereIF(queryObj.Id != null, a => a.Id == queryObj.Id) |
| | | .WhereIF(StringUtil.IsNotNullOrEmpty(queryObj.BillNo), |
| | | a => a.BillNo == queryObj.BillNo) |
| | | .WhereIF( |
| | | StringUtil.IsNotNullOrEmpty(queryObj.Result) && |
| | | "未完成".Equals(queryObj.Result), |
| | | a => a.Fsubmit == 0) |
| | | .WhereIF( |
| | | StringUtil.IsNotNullOrEmpty(queryObj.Result) && |
| | | !"未完成".Equals(queryObj.Result), |
| | | a => a.Fsubmit == 1); |
| | | |
| | | // 新增的动态搜索逻辑 |
| | | if (!string.IsNullOrEmpty(queryObj.SearchValue) && !string.IsNullOrEmpty(queryObj.searchField)) |
| | | // 如果有车间或线体筛选,需要联接 MES_LINE 表 |
| | | if (!string.IsNullOrEmpty(queryObj.departmentId) || !string.IsNullOrEmpty(queryObj.lineId)) |
| | | { |
| | | switch (queryObj.searchField) |
| | | var query = db.Queryable<SJPageResult, MesLine>((a, m) => |
| | | new JoinQueryInfos(JoinType.Left, a.line == m.LineNo)) |
| | | .WhereIF(lineNo != null && lineNo.Length > 0, |
| | | (a, m) => lineNo.Contains(a.line)) |
| | | .WhereIF(queryObj.Id != null, (a, m) => a.Id == queryObj.Id) |
| | | .WhereIF(StringUtil.IsNotNullOrEmpty(queryObj.BillNo), |
| | | (a, m) => a.BillNo == queryObj.BillNo) |
| | | .WhereIF( |
| | | StringUtil.IsNotNullOrEmpty(queryObj.Result) && |
| | | "未完成".Equals(queryObj.Result), |
| | | (a, m) => a.Fsubmit == 0) |
| | | .WhereIF( |
| | | StringUtil.IsNotNullOrEmpty(queryObj.Result) && |
| | | !"未完成".Equals(queryObj.Result), |
| | | (a, m) => a.Fsubmit == 1) |
| | | // 添加车间筛选 |
| | | .WhereIF(!string.IsNullOrEmpty(queryObj.departmentId), |
| | | (a, m) => m.DepotId.ToString() == queryObj.departmentId) |
| | | // 添加线体筛选 |
| | | .WhereIF(!string.IsNullOrEmpty(queryObj.lineId), |
| | | (a, m) => m.LineNo == queryObj.lineId); |
| | | |
| | | // 添加搜索条件 |
| | | if (!string.IsNullOrEmpty(queryObj.SearchValue) && !string.IsNullOrEmpty(queryObj.searchField)) |
| | | { |
| | | case "daa001": // 工单 |
| | | query = query.Where(x => x.daa001.Contains(queryObj.SearchValue)); |
| | | break; |
| | | case "billNo": // 检验单号 |
| | | query = query.Where(x => x.BillNo.Contains(queryObj.SearchValue)); |
| | | break; |
| | | case "line": // 产线 |
| | | query = query.Where(x => x.line.Contains(queryObj.SearchValue)); |
| | | break; |
| | | case "itemNo": // 物料编码 |
| | | query = query.Where(x => x.ItemNo.Contains(queryObj.SearchValue)); |
| | | break; |
| | | case "daa003": // 物料名称 |
| | | query = query.Where(x => x.Daa003.Contains(queryObj.SearchValue)); |
| | | break; |
| | | default: |
| | | // 如果没有指定字段或字段不匹配,使用原有的模糊查询逻辑作为兜底方案 |
| | | query = query.Where(x => |
| | | x.ItemNo.Contains(queryObj.SearchValue) || |
| | | x.Daa003.Contains(queryObj.SearchValue) || |
| | | x.daa001.Contains(queryObj.SearchValue) || |
| | | x.BillNo.Contains(queryObj.SearchValue) || |
| | | x.line.Contains(queryObj.SearchValue)); |
| | | break; |
| | | switch (queryObj.searchField) |
| | | { |
| | | case "daa001": // 工单 |
| | | query = query.Where((a, m) => a.daa001.Contains(queryObj.SearchValue)); |
| | | break; |
| | | case "billNo": // 检验单号 |
| | | query = query.Where((a, m) => a.BillNo.Contains(queryObj.SearchValue)); |
| | | break; |
| | | case "line": // 产线 |
| | | query = query.Where((a, m) => a.line.Contains(queryObj.SearchValue)); |
| | | break; |
| | | case "itemNo": // 物料编码 |
| | | query = query.Where((a, m) => a.ItemNo.Contains(queryObj.SearchValue)); |
| | | break; |
| | | case "daa003": // 物料名称 |
| | | query = query.Where((a, m) => a.Daa003.Contains(queryObj.SearchValue)); |
| | | break; |
| | | default: |
| | | query = query.Where((a, m) => |
| | | a.ItemNo.Contains(queryObj.SearchValue) || |
| | | a.Daa003.Contains(queryObj.SearchValue) || |
| | | a.daa001.Contains(queryObj.SearchValue) || |
| | | a.BillNo.Contains(queryObj.SearchValue) || |
| | | a.line.Contains(queryObj.SearchValue)); |
| | | break; |
| | | } |
| | | } |
| | | else if (string.IsNullOrEmpty(queryObj.searchField) && !string.IsNullOrEmpty(queryObj.SearchValue)) |
| | | { |
| | | query = query.Where((a, m) => |
| | | a.ItemNo.Contains(queryObj.SearchValue) || |
| | | a.Daa003.Contains(queryObj.SearchValue) || |
| | | a.daa001.Contains(queryObj.SearchValue) || |
| | | a.BillNo.Contains(queryObj.SearchValue) || |
| | | a.line.Contains(queryObj.SearchValue)); |
| | | } |
| | | |
| | | var totalCount = 0; |
| | | var data = query.OrderBy((a, m) => a.BillNo, OrderByType.Desc) |
| | | .Select((a, m) => a) |
| | | .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount); |
| | | |
| | | return (data, totalCount); |
| | | } |
| | | // 为了兼容旧版本,如果没有传递 searchField,使用原来的查询逻辑 |
| | | else if (string.IsNullOrEmpty(queryObj.searchField) && !string.IsNullOrEmpty(queryObj.SearchValue)) |
| | | else |
| | | { |
| | | // 保持原有的多字段模糊查询逻辑 |
| | | query = query.Where(x => |
| | | x.ItemNo.Contains(queryObj.SearchValue) || |
| | | x.Daa003.Contains(queryObj.SearchValue) || |
| | | x.daa001.Contains(queryObj.SearchValue) || |
| | | x.BillNo.Contains(queryObj.SearchValue) || |
| | | x.line.Contains(queryObj.SearchValue)); |
| | | // 没有车间和线体筛选时,使用原来的查询逻辑 |
| | | var query = db.Queryable<SJPageResult>() |
| | | .WhereIF(lineNo != null && lineNo.Length > 0, |
| | | a => lineNo.Contains(a.line)) |
| | | .WhereIF(queryObj.Id != null, a => a.Id == queryObj.Id) |
| | | .WhereIF(StringUtil.IsNotNullOrEmpty(queryObj.BillNo), |
| | | a => a.BillNo == queryObj.BillNo) |
| | | .WhereIF( |
| | | StringUtil.IsNotNullOrEmpty(queryObj.Result) && |
| | | "未完成".Equals(queryObj.Result), |
| | | a => a.Fsubmit == 0) |
| | | .WhereIF( |
| | | StringUtil.IsNotNullOrEmpty(queryObj.Result) && |
| | | !"未完成".Equals(queryObj.Result), |
| | | a => a.Fsubmit == 1); |
| | | |
| | | // 新增的动态搜索逻辑 |
| | | if (!string.IsNullOrEmpty(queryObj.SearchValue) && !string.IsNullOrEmpty(queryObj.searchField)) |
| | | { |
| | | switch (queryObj.searchField) |
| | | { |
| | | case "daa001": // 工单 |
| | | query = query.Where(x => x.daa001.Contains(queryObj.SearchValue)); |
| | | break; |
| | | case "billNo": // 检验单号 |
| | | query = query.Where(x => x.BillNo.Contains(queryObj.SearchValue)); |
| | | break; |
| | | case "line": // 产线 |
| | | query = query.Where(x => x.line.Contains(queryObj.SearchValue)); |
| | | break; |
| | | case "itemNo": // 物料编码 |
| | | query = query.Where(x => x.ItemNo.Contains(queryObj.SearchValue)); |
| | | break; |
| | | case "daa003": // 物料名称 |
| | | query = query.Where(x => x.Daa003.Contains(queryObj.SearchValue)); |
| | | break; |
| | | default: |
| | | // 如果没有指定字段或字段不匹配,使用原有的模糊查询逻辑作为兜底方案 |
| | | query = query.Where(x => |
| | | x.ItemNo.Contains(queryObj.SearchValue) || |
| | | x.Daa003.Contains(queryObj.SearchValue) || |
| | | x.daa001.Contains(queryObj.SearchValue) || |
| | | x.BillNo.Contains(queryObj.SearchValue) || |
| | | x.line.Contains(queryObj.SearchValue)); |
| | | break; |
| | | } |
| | | } |
| | | // 为了兼容旧版本,如果没有传递 searchField,使用原来的查询逻辑 |
| | | else if (string.IsNullOrEmpty(queryObj.searchField) && !string.IsNullOrEmpty(queryObj.SearchValue)) |
| | | { |
| | | // 保持原有的多字段模糊查询逻辑 |
| | | query = query.Where(x => |
| | | x.ItemNo.Contains(queryObj.SearchValue) || |
| | | x.Daa003.Contains(queryObj.SearchValue) || |
| | | x.daa001.Contains(queryObj.SearchValue) || |
| | | x.BillNo.Contains(queryObj.SearchValue) || |
| | | x.line.Contains(queryObj.SearchValue)); |
| | | } |
| | | |
| | | var totalCount = 0; |
| | | var data = query.OrderBy(a => a.BillNo, OrderByType.Desc) |
| | | .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount); |
| | | |
| | | return (data, totalCount); |
| | | } |
| | | |
| | | var totalCount = 0; |
| | | var data = query.OrderBy(a => a.BillNo, OrderByType.Desc) |
| | | .ToPageList(queryObj.PageIndex, queryObj.Limit, ref totalCount); |
| | | |
| | | return (data, totalCount); |
| | | } |
| | | |
| | | |
| | |
| | | Mnum = b.Mnum, // 从主表获取MNUM |
| | | Dnum = b.Dnum, // 从子表获取DNUM |
| | | Snum = a.Snum, // 送检批数 |
| | | Remarks = a.Remarks |
| | | Remarks = a.Remarks, |
| | | Forder = a.Forder // 顺序字段 |
| | | }).ToList(); |
| | | |
| | | var array = qsItemIpiItems.Select(s => s.Id).ToArray(); |
| | |
| | | qsItemIpiItem.imageData = Convert.ToBase64String(s.Picture); |
| | | }); |
| | | |
| | | //排序,未完成的排在前面 |
| | | qsItemIpiItems = qsItemIpiItems.OrderBy(s => s.isCheck).ToList(); |
| | | //排序:只按FORDER顺序排序 |
| | | qsItemIpiItems = qsItemIpiItems |
| | | .OrderBy(s => s.Forder ?? 0) |
| | | .ToList(); |
| | | |
| | | // 为每个检验项目生成穴号信息 |
| | | qsItemIpiItems.ForEach(item => |
| | |
| | | ) |
| | | ); |
| | | |
| | | // 添加线体筛选条件 |
| | | // 添加线体筛选条件(基于用户权限) |
| | | if (lineNo != null && lineNo.Length > 0) |
| | | { |
| | | query = query.Where((s, a, c, b) => lineNo.Contains(c.LineNo)); |
| | | } |
| | | |
| | | // 添加QC筛选条件:车间和线体 |
| | | if (!string.IsNullOrEmpty(queryObj.departmentId)) |
| | | { |
| | | // 如果指定了车间,筛选该车间下的线体 |
| | | query = query.Where((s, a, c, b) => c.DepotId.ToString() == queryObj.departmentId); |
| | | } |
| | | |
| | | if (!string.IsNullOrEmpty(queryObj.lineId)) |
| | | { |
| | | // 如果指定了线体,直接筛选线体 |
| | | query = query.Where((s, a, c, b) => c.LineNo == queryObj.lineId); |
| | | } |
| | | |
| | | // 添加状态筛选条件 - 明确匹配前端传递的值 |
| | |
| | | var qsQaItemXj01s = db.Queryable<QsQaItemXj01>() |
| | | .WhereIF(pid > 0, a => a.Pid == pid) |
| | | .WhereIF(id > 0, a => a.Id == id) |
| | | .OrderBy(a => a.Forder ?? 0) |
| | | .ToList(); |
| | | |
| | | var array = qsQaItemXj01s.Select(s => s.Id).ToArray(); |
| | |
| | | s.imageData = Convert.ToBase64String(s.Picture); |
| | | }); |
| | | |
| | | //排序,未完成的排在前面 |
| | | qsQaItemXj01s = qsQaItemXj01s.OrderBy(s => s.isCheck).ToList(); |
| | | //排序:只按FORDER顺序排序 |
| | | qsQaItemXj01s = qsQaItemXj01s |
| | | .OrderBy(s => s.Forder ?? 0) |
| | | .ToList(); |
| | | |
| | | return qsQaItemXj01s; |
| | | } |
| | |
| | | return ResponseResult.ResponseError(ex); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取QC车间列表 |
| | | /// </summary> |
| | | /// <returns>车间列表</returns> |
| | | [HttpPost("GetQCDepartments")] |
| | | public ResponseResult GetQCDepartments() |
| | | { |
| | | try |
| | | { |
| | | var departments = new BaseService().GetQCDepartments(); |
| | | return new ResponseResult |
| | | { |
| | | status = 0, |
| | | message = "OK", |
| | | data = departments |
| | | }; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return ResponseResult.ResponseError(ex); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取QC线体列表(根据车间ID筛选) |
| | | /// </summary> |
| | | /// <param name="data">包含 departmentId 的请求数据</param> |
| | | /// <returns>线体列表</returns> |
| | | [HttpPost("GetQCLines")] |
| | | public ResponseResult GetQCLines([FromBody] JObject data) |
| | | { |
| | | try |
| | | { |
| | | string? departmentId = data["departmentId"]?.ToString(); |
| | | var lines = new BaseService().GetQCLines(departmentId); |
| | | return new ResponseResult |
| | | { |
| | | status = 0, |
| | | message = "OK", |
| | | data = lines |
| | | }; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return ResponseResult.ResponseError(ex); |
| | | } |
| | | } |
| | | } |
| | |
| | | public ResponseResult GetAttachments([FromBody] JObject data) |
| | | { |
| | | var itemNo = data["itemNo"]?.ToString(); |
| | | var fversion = data["fversion"]?.ToString(); |
| | | var fromPage = data["fromPage"]?.ToString(); |
| | | |
| | | // 根据来源页面决定是否过滤 |
| | | string filterFversion = null; |
| | | if (fromPage == "Detail" && !string.IsNullOrEmpty(fversion)) |
| | | { |
| | | filterFversion = fversion; // Detail页面需要过滤 |
| | | } |
| | | // Add页面不传递filterFversion,显示所有附件 |
| | | |
| | | try |
| | | { |
| | | dynamic resultInfos = new System.Dynamic.ExpandoObject(); |
| | | var tbBillList = new LljService().GetAttachments(itemNo); |
| | | var tbBillList = new LljService().GetAttachments(itemNo, filterFversion); |
| | | if (tbBillList == null || tbBillList.Count == 0) |
| | | { |
| | | return new ResponseResult |
| | |
| | | } |
| | | |
| | | [HttpGet("PreviewFtpFile")] |
| | | public IActionResult PreviewFtpFile([FromQuery] string itemNo, [FromQuery] string fileName, [FromQuery] string ftpServer) |
| | | public IActionResult PreviewFtpFile([FromQuery] string itemNo, [FromQuery] string fileName, [FromQuery] string ftpServer, [FromQuery] string fversion = null) |
| | | { |
| | | try |
| | | { |
| | |
| | | Response.Headers.Add("Access-Control-Expose-Headers", "Content-Type, Content-Length"); |
| | | |
| | | var service = new LljService(); |
| | | var fileBytes = service.GetFtpFile(itemNo, fileName, ftpServer); |
| | | var fileBytes = service.GetFtpFile(itemNo, fileName, ftpServer, fversion); |
| | | |
| | | if (fileBytes == null || fileBytes.Length == 0) |
| | | { |
| | |
| | | } |
| | | |
| | | [HttpGet("DownloadFtpFile")] |
| | | public IActionResult DownloadFtpFile([FromQuery] string itemNo, [FromQuery] string fileName, [FromQuery] string ftpServer) |
| | | public IActionResult DownloadFtpFile([FromQuery] string itemNo, [FromQuery] string fileName, [FromQuery] string ftpServer, [FromQuery] string fversion = null) |
| | | { |
| | | try |
| | | { |
| | |
| | | Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition, Content-Length, Content-Type"); |
| | | |
| | | var service = new LljService(); |
| | | var fileBytes = service.GetFtpFile(itemNo, fileName, ftpServer); |
| | | var fileBytes = service.GetFtpFile(itemNo, fileName, ftpServer, fversion); |
| | | |
| | | if (fileBytes == null || fileBytes.Length == 0) |
| | | { |
| | |
| | | "AppSettings": { |
| | | "TestErpUrl": "http://192.168.11.120:8098/WebService1.asmx/mesToErpinfo", |
| | | "ProductionErpUrl": "http://192.168.11.120:8098/WebService1.asmx/mesToErpinfoFormal", |
| | | "DataBaseConn": "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.22)(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL))); Persist Security Info=True;User ID = hm_prd; Password=hmprd" |
| | | "DataBaseConn": "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.22)(PORT = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCL))); Persist Security Info=True;User ID = test_dev; Password=hmprd" |
| | | } |
| | | } |