From 8e5e2fb892df6cc8c61d7c03baa2412522ad11c4 Mon Sep 17 00:00:00 2001
From: xwt <2740516069@qq.com>
Date: 星期四, 25 九月 2025 19:17:11 +0800
Subject: [PATCH] SJ,XJ,RKJ优化
---
StandardInterface/MES.Service/Dto/service/XJPageResult.cs | 7
StandardInterface/MESApplication/Controllers/QC/SJController.cs | 114 ++++++++++++++++
StandardInterface/MES.Service/service/QC/RKJService.cs | 19 ++
StandardInterface/MES.Service/service/QC/XJService.cs | 43 ++++++
StandardInterface/MES.Service/service/QC/SJService.cs | 210 ++++++++++++++++++++++++++++++
StandardInterface/MESApplication/appsettings.json | 2
6 files changed, 393 insertions(+), 2 deletions(-)
diff --git a/StandardInterface/MES.Service/Dto/service/XJPageResult.cs b/StandardInterface/MES.Service/Dto/service/XJPageResult.cs
index fd8e155..9b5bd7a 100644
--- a/StandardInterface/MES.Service/Dto/service/XJPageResult.cs
+++ b/StandardInterface/MES.Service/Dto/service/XJPageResult.cs
@@ -17,8 +17,13 @@
/// <summary>
/// 鎼滅储鏉′欢绱㈠紩锛岀敤浜庢寚瀹氭悳绱㈠摢涓瓧娈�
- /// 0: 椤圭洰(涓嶇瓫閫�), 1: 鐗╂枡缂栧彿, 2: 鐗╂枡鍚嶇О, 3: 渚涘簲鍟�, 4: 鍒拌揣鍗曞彿, 5: 妫�楠屽崟鍙�, 6: 鐗╂枡瑙勬牸
+ /// 0: 宸ュ崟, 1: 妫�楠屽崟鍙�, 2: 浜х嚎, 3: 鐗╂枡缂栫爜, 4: 鐗╂枡鍚嶇О
/// </summary>
public int? selectedIndex { get; set; }
+
+ /// <summary>
+ /// 鎼滅储瀛楁鍚嶏紝鐢ㄤ簬鎸囧畾鎼滅储鍝釜瀛楁
+ /// </summary>
+ public string? searchField { get; set; }
}
\ No newline at end of file
diff --git a/StandardInterface/MES.Service/service/QC/RKJService.cs b/StandardInterface/MES.Service/service/QC/RKJService.cs
index 86c7046..92353cc 100644
--- a/StandardInterface/MES.Service/service/QC/RKJService.cs
+++ b/StandardInterface/MES.Service/service/QC/RKJService.cs
@@ -632,6 +632,25 @@
.WhereIF(
StringUtil.IsNullOrEmpty(queryObj.fsubmit) || queryObj.fsubmit == "0",
(a, da, b) => 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))
+ .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && !string.IsNullOrEmpty(queryObj.searchField) && queryObj.searchField == "releaseNo", // 妫�楠屽崟鍙�
+ (a, da, b) => 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))
+ .WhereIF(!string.IsNullOrEmpty(queryObj.SearchValue) && !string.IsNullOrEmpty(queryObj.searchField) && queryObj.searchField == "itemNo", // 鐗╂枡缂栫爜
+ (a, da, b) => 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))
+ // 涓轰簡鍏煎鏃х増鏈紝濡傛灉娌℃湁浼犻�� searchField锛屼娇鐢ㄥ師鏉ョ殑鏌ヨ閫昏緫
+ .WhereIF(string.IsNullOrEmpty(queryObj.searchField) && !string.IsNullOrEmpty(queryObj.SearchValue),
+ (a, da, b) =>
+ 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
{
Id = a.Id,
diff --git a/StandardInterface/MES.Service/service/QC/SJService.cs b/StandardInterface/MES.Service/service/QC/SJService.cs
index 91e8c9e..9ea4fb8 100644
--- a/StandardInterface/MES.Service/service/QC/SJService.cs
+++ b/StandardInterface/MES.Service/service/QC/SJService.cs
@@ -738,6 +738,216 @@
}
/// <summary>
+ /// 鑾峰彇闄勪欢淇℃伅
+ /// </summary>
+ /// <param name="itemNo">鐗╂枡缂栫爜</param>
+ /// <returns>闄勪欢鍒楄〃</returns>
+ public List<QamftpDto> GetAttachments(string itemNo)
+ {
+ var db = SqlSugarHelper.GetInstance();
+ try
+ {
+ return db.Queryable<MesQamftp>()
+ .Where(x => x.ItemNo == itemNo)
+ .OrderBy(x => x.Fdate, OrderByType.Desc)
+ .Select(x => new QamftpDto
+ {
+ Id = x.Id,
+ itemNo = x.ItemNo,
+ Ftype = x.Ftype,
+ Fattach = x.Fattach,
+ Fversion = x.Fversion,
+ Fdate = x.Fdate,
+ CreateBy = x.CreateBy,
+ CreateDate = x.CreateDate,
+ Company = x.Company,
+ Factory = x.Factory,
+ F_type = x.F_type,
+ LastupdateBy = x.LastupdateBy,
+ LastupdateDate = x.LastupdateDate,
+ ItemId = x.ItemId
+ }).ToList();
+ }
+ catch (Exception ex)
+ {
+ throw new Exception($"鏌ヨ闄勪欢淇℃伅澶辫触: {ex.Message}");
+ }
+ }
+
+ /// <summary>
+ /// 浠嶧TP鏈嶅姟鍣ㄨ幏鍙栨枃浠讹紙棣栨浣跨敤OPC鐩綍锛�
+ /// </summary>
+ /// <param name="itemNo">鐗╂枡缂栫爜</param>
+ /// <param name="fileName">鏂囦欢鍚�</param>
+ /// <param name="ftpServer">FTP鏈嶅姟鍣ㄥ湴鍧�</param>
+ /// <returns>鏂囦欢瀛楄妭鏁扮粍</returns>
+ public byte[] GetFtpFile(string itemNo, string fileName, string ftpServer)
+ {
+ // 鍙傛暟楠岃瘉
+ if (string.IsNullOrEmpty(itemNo) || string.IsNullOrEmpty(fileName) || string.IsNullOrEmpty(ftpServer))
+ {
+ throw new ArgumentException("鍙傛暟涓嶈兘涓虹┖: itemNo, fileName, ftpServer");
+ }
+
+ string ftpUser = "hm_ftp";
+ string ftpPwd = "dell_123";
+
+ // 鏍囧噯鍖朏TP鏈嶅姟鍣ㄥ湴鍧�
+ string normalizedServer = NormalizeFtpServer(ftpServer);
+
+ // 鏋勫缓FTP鏂囦欢璺緞 - 棣栨浣跨敤OPC鐩綍
+ string ftpPath = $"{normalizedServer}/OPC/{itemNo}/{fileName}";
+
+ try
+ {
+ var request = (System.Net.FtpWebRequest)System.Net.WebRequest.Create(ftpPath);
+ request.Method = System.Net.WebRequestMethods.Ftp.DownloadFile;
+ request.Credentials = new System.Net.NetworkCredential(ftpUser, ftpPwd);
+ request.UseBinary = true;
+ request.UsePassive = false;
+ request.Timeout = 30000; // 30绉掕秴鏃�
+ request.ReadWriteTimeout = 30000;
+
+ using (var response = (System.Net.FtpWebResponse)request.GetResponse())
+ using (var ftpStream = response.GetResponseStream())
+ using (var ms = new System.IO.MemoryStream())
+ {
+ if (ftpStream == null)
+ {
+ throw new Exception("FTP鍝嶅簲娴佷负绌�");
+ }
+
+ ftpStream.CopyTo(ms);
+ var fileBytes = ms.ToArray();
+
+ if (fileBytes.Length == 0)
+ {
+ return null; // 鏂囦欢涓虹┖鎴栦笉瀛樺湪
+ }
+
+ return fileBytes;
+ }
+ }
+ catch (System.Net.WebException ex)
+ {
+ if (ex.Response is System.Net.FtpWebResponse ftpResponse)
+ {
+ switch (ftpResponse.StatusCode)
+ {
+ case System.Net.FtpStatusCode.ActionNotTakenFileUnavailable:
+ return null; // 鏂囦欢涓嶅瓨鍦�
+ case System.Net.FtpStatusCode.NotLoggedIn:
+ throw new Exception("FTP璁よ瘉澶辫触锛岃妫�鏌ョ敤鎴峰悕鍜屽瘑鐮�");
+ case System.Net.FtpStatusCode.ActionNotTakenFilenameNotAllowed:
+ throw new Exception("鏂囦欢鍚嶄笉琚厑璁告垨璺緞鏃犳晥");
+ default:
+ throw new Exception($"FTP閿欒 ({ftpResponse.StatusCode}): {ftpResponse.StatusDescription}");
+ }
+ }
+
+ // 澶勭悊瓒呮椂鍜岀綉缁滈敊璇�
+ if (ex.Status == System.Net.WebExceptionStatus.Timeout)
+ {
+ throw new Exception("FTP杩炴帴瓒呮椂锛岃绋嶅悗閲嶈瘯");
+ }
+
+ throw new Exception($"FTP杩炴帴澶辫触: {ex.Message}");
+ }
+ catch (Exception ex)
+ {
+ throw new Exception($"鑾峰彇鏂囦欢澶辫触: {ex.Message}");
+ }
+ }
+
+ /// <summary>
+ /// 鏍囧噯鍖朏TP鏈嶅姟鍣ㄥ湴鍧�
+ /// </summary>
+ /// <param name="ftpServer">FTP鏈嶅姟鍣ㄥ湴鍧�</param>
+ /// <returns>鏍囧噯鍖栧悗鐨凢TP鏈嶅姟鍣ㄥ湴鍧�</returns>
+ private string NormalizeFtpServer(string ftpServer)
+ {
+ if (string.IsNullOrEmpty(ftpServer))
+ {
+ throw new ArgumentException("FTP鏈嶅姟鍣ㄥ湴鍧�涓嶈兘涓虹┖");
+ }
+
+ // 纭繚浠tp://寮�澶�
+ string normalizedServer = ftpServer.StartsWith("ftp://") ? ftpServer : $"ftp://{ftpServer}";
+
+ // 鐗规畩澶勭悊宸茬煡鏈嶅姟鍣ㄥ湴鍧�
+ if (normalizedServer == "ftp://36.26.21.214")
+ {
+ normalizedServer = "ftp://36.26.21.214:21";
+ }
+ else if (!normalizedServer.Contains(":") && normalizedServer.StartsWith("ftp://"))
+ {
+ normalizedServer += ":21"; // 榛樿FTP绔彛
+ }
+
+ // 寮�鍙戠幆澧冧娇鐢ㄦ湰鍦版湇鍔″櫒
+ normalizedServer = "ftp://192.168.1.22:21";
+
+ return normalizedServer;
+ }
+
+ /// <summary>
+ /// 鑾峰彇鏂囦欢鐨勫唴瀹圭被鍨�
+ /// </summary>
+ /// <param name="fileName">鏂囦欢鍚�</param>
+ /// <returns>MIME绫诲瀷</returns>
+ public string GetContentType(string fileName)
+ {
+ if (string.IsNullOrEmpty(fileName))
+ return "application/octet-stream";
+
+ var extension = System.IO.Path.GetExtension(fileName).ToLower();
+
+ return extension switch
+ {
+ // PDF鏂囦欢
+ ".pdf" => "application/pdf",
+
+ // 鍥剧墖鏂囦欢
+ ".jpg" or ".jpeg" => "image/jpeg",
+ ".png" => "image/png",
+ ".gif" => "image/gif",
+ ".bmp" => "image/bmp",
+ ".webp" => "image/webp",
+ ".svg" => "image/svg+xml",
+ ".ico" => "image/x-icon",
+
+ // 鏂囨湰鏂囦欢
+ ".txt" => "text/plain",
+ ".log" => "text/plain",
+ ".md" => "text/markdown",
+ ".html" or ".htm" => "text/html",
+ ".css" => "text/css",
+ ".js" => "application/javascript",
+ ".json" => "application/json",
+ ".xml" => "application/xml",
+
+ // Office鏂囨。
+ ".doc" => "application/msword",
+ ".docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+ ".xls" => "application/vnd.ms-excel",
+ ".xlsx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
+ ".ppt" => "application/vnd.ms-powerpoint",
+ ".pptx" => "application/vnd.openxmlformats-officedocument.presentationml.presentation",
+
+ // 鍏朵粬甯歌鏍煎紡
+ ".csv" => "text/csv",
+ ".zip" => "application/zip",
+ ".rar" => "application/x-rar-compressed",
+ ".7z" => "application/x-7z-compressed",
+ ".tar" => "application/x-tar",
+ ".gz" => "application/gzip",
+
+ // 榛樿
+ _ => "application/octet-stream"
+ };
+ }
+
+ /// <summary>
/// 鐢熸垚绌村彿淇℃伅
/// </summary>
/// <param name="mnum">寮�绌存�绘暟</param>
diff --git a/StandardInterface/MES.Service/service/QC/XJService.cs b/StandardInterface/MES.Service/service/QC/XJService.cs
index 0d1564e..8d3ddfc 100644
--- a/StandardInterface/MES.Service/service/QC/XJService.cs
+++ b/StandardInterface/MES.Service/service/QC/XJService.cs
@@ -172,6 +172,49 @@
}
}
+ // 娣诲姞鎼滅储鏉′欢 - 鏍规嵁閫夋嫨鐨勬悳绱㈠瓧娈佃繘琛岀簿纭悳绱�
+ if (!string.IsNullOrEmpty(queryObj.SearchValue) && !string.IsNullOrEmpty(queryObj.searchField))
+ {
+ switch (queryObj.searchField)
+ {
+ case "billNo": // 宸ュ崟
+ query = query.Where((s, a, c, b) => s.BillNo.Contains(queryObj.SearchValue));
+ break;
+ case "releaseNo": // 妫�楠屽崟鍙�
+ query = query.Where((s, a, c, b) => s.ReleaseNo.Contains(queryObj.SearchValue));
+ break;
+ case "daa020": // 浜х嚎
+ query = query.Where((s, a, c, b) => c.LineNo.Contains(queryObj.SearchValue));
+ break;
+ case "itemNo": // 鐗╂枡缂栫爜
+ query = query.Where((s, a, c, b) => s.ItemNo.Contains(queryObj.SearchValue));
+ break;
+ case "itemName": // 鐗╂枡鍚嶇О
+ query = query.Where((s, a, c, b) => b.ItemName.Contains(queryObj.SearchValue));
+ break;
+ default:
+ // 濡傛灉娌℃湁鎸囧畾瀛楁鎴栧瓧娈典笉鍖归厤锛屼娇鐢ㄥ師鏈夌殑妯$硦鏌ヨ閫昏緫浣滀负鍏滃簳鏂规
+ query = query.Where((s, a, c, b) =>
+ s.ItemNo.Contains(queryObj.SearchValue) ||
+ b.ItemName.Contains(queryObj.SearchValue) ||
+ s.BillNo.Contains(queryObj.SearchValue) ||
+ s.ReleaseNo.Contains(queryObj.SearchValue) ||
+ c.LineNo.Contains(queryObj.SearchValue));
+ break;
+ }
+ }
+ // 涓轰簡鍏煎鏃х増鏈紝濡傛灉娌℃湁浼犻�� searchField锛屼娇鐢ㄥ師鏉ョ殑鏌ヨ閫昏緫
+ else if (string.IsNullOrEmpty(queryObj.searchField) && !string.IsNullOrEmpty(queryObj.SearchValue))
+ {
+ // 淇濇寔鍘熸湁鐨勫瀛楁妯$硦鏌ヨ閫昏緫
+ query = query.Where((s, a, c, b) =>
+ s.ItemNo.Contains(queryObj.SearchValue) ||
+ b.ItemName.Contains(queryObj.SearchValue) ||
+ s.BillNo.Contains(queryObj.SearchValue) ||
+ s.ReleaseNo.Contains(queryObj.SearchValue) ||
+ c.LineNo.Contains(queryObj.SearchValue));
+ }
+
// 娣诲姞ID绛涢�夋潯浠�
if (id > 0)
{
diff --git a/StandardInterface/MESApplication/Controllers/QC/SJController.cs b/StandardInterface/MESApplication/Controllers/QC/SJController.cs
index 918e0d5..a50af9f 100644
--- a/StandardInterface/MESApplication/Controllers/QC/SJController.cs
+++ b/StandardInterface/MESApplication/Controllers/QC/SJController.cs
@@ -371,4 +371,118 @@
return ResponseResult.ResponseError(ex);
}
}
+
+ /// <summary>
+ /// 鑾峰彇闄勪欢淇℃伅
+ /// </summary>
+ /// <param name="data">鍖呭惈itemNo鐨凧SON瀵硅薄</param>
+ /// <returns>闄勪欢鍒楄〃</returns>
+ [HttpPost("getAttachments")]
+ public ResponseResult GetAttachments([FromBody] JObject data)
+ {
+ var itemNo = data["itemNo"]?.ToString();
+ try
+ {
+ dynamic resultInfos = new System.Dynamic.ExpandoObject();
+ var tbBillList = new SJService().GetAttachments(itemNo);
+ if (tbBillList == null || tbBillList.Count == 0)
+ {
+ return new ResponseResult
+ {
+ status = 1,
+ message = "璇ユ楠屽崟鏈笂浼犻檮浠朵俊鎭紒",
+ data = null
+ };
+ }
+ resultInfos.tbBillList = tbBillList;
+ return new ResponseResult
+ {
+ status = 0,
+ message = "OK",
+ data = resultInfos
+ };
+ }
+ catch (Exception ex)
+ {
+ return ResponseResult.ResponseError(ex);
+ }
+ }
+
+ /// <summary>
+ /// 棰勮FTP鏂囦欢
+ /// </summary>
+ /// <param name="itemNo">鐗╂枡缂栫爜</param>
+ /// <param name="fileName">鏂囦欢鍚�</param>
+ /// <param name="ftpServer">FTP鏈嶅姟鍣ㄥ湴鍧�</param>
+ /// <returns>鏂囦欢鍐呭</returns>
+ [HttpGet("PreviewFtpFile")]
+ public IActionResult PreviewFtpFile([FromQuery] string itemNo, [FromQuery] string fileName, [FromQuery] string ftpServer)
+ {
+ try
+ {
+ var fileBytes = new SJService().GetFtpFile(itemNo, fileName, ftpServer);
+ if (fileBytes == null)
+ {
+ return NotFound(new ResponseResult
+ {
+ status = 1,
+ message = "鏂囦欢涓嶅瓨鍦ㄦ垨鏃犳硶璁块棶",
+ data = null
+ });
+ }
+
+ var contentType = new SJService().GetContentType(fileName);
+ return File(fileBytes, contentType, fileName);
+ }
+ catch (Exception ex)
+ {
+ return StatusCode(500, new ResponseResult
+ {
+ status = 1,
+ message = ex.Message,
+ data = null
+ });
+ }
+ }
+
+ /// <summary>
+ /// 涓嬭浇FTP鏂囦欢
+ /// </summary>
+ /// <param name="itemNo">鐗╂枡缂栫爜</param>
+ /// <param name="fileName">鏂囦欢鍚�</param>
+ /// <param name="ftpServer">FTP鏈嶅姟鍣ㄥ湴鍧�</param>
+ /// <returns>鏂囦欢涓嬭浇</returns>
+ [HttpGet("DownloadFtpFile")]
+ public IActionResult DownloadFtpFile([FromQuery] string itemNo, [FromQuery] string fileName, [FromQuery] string ftpServer)
+ {
+ try
+ {
+ var fileBytes = new SJService().GetFtpFile(itemNo, fileName, ftpServer);
+ if (fileBytes == null)
+ {
+ return NotFound(new ResponseResult
+ {
+ status = 1,
+ message = "鏂囦欢涓嶅瓨鍦ㄦ垨鏃犳硶璁块棶",
+ data = null
+ });
+ }
+
+ var contentType = new SJService().GetContentType(fileName);
+
+ // 璁剧疆涓嬭浇鍝嶅簲澶�
+ Response.Headers.Add("Content-Disposition", $"attachment; filename=\"{fileName}\"");
+
+ return File(fileBytes, contentType, fileName);
+ }
+ catch (Exception ex)
+ {
+ return StatusCode(500, new ResponseResult
+ {
+ status = 1,
+ message = ex.Message,
+ data = null
+ });
+ }
+ }
}
\ No newline at end of file
diff --git a/StandardInterface/MESApplication/appsettings.json b/StandardInterface/MESApplication/appsettings.json
index 59a3601..28cfc2a 100644
--- a/StandardInterface/MESApplication/appsettings.json
+++ b/StandardInterface/MESApplication/appsettings.json
@@ -10,6 +10,6 @@
"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 = test_dev; 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 = hm_prd; Password=hmprd"
}
}
--
Gitblit v1.9.3