From c5a3cfd2cd3e140892fc93cc52902b5b204a50d5 Mon Sep 17 00:00:00 2001 From: hao <1836460075@qq.com> Date: 星期六, 23 八月 2025 10:03:01 +0800 Subject: [PATCH] Merge branch 'master' of http://43.142.96.171:8080/r/~yhj/HM_JK --- StandardInterface/MES.Service/service/QC/RKJService.cs | 645 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 578 insertions(+), 67 deletions(-) diff --git a/StandardInterface/MES.Service/service/QC/RKJService.cs b/StandardInterface/MES.Service/service/QC/RKJService.cs index d7a9df3..1365909 100644 --- a/StandardInterface/MES.Service/service/QC/RKJService.cs +++ b/StandardInterface/MES.Service/service/QC/RKJService.cs @@ -1,8 +1,14 @@ 锘縰sing MES.Service.DB; using MES.Service.Dto.service; using MES.Service.Modes; +using MES.Service.Modes.QcIssueResult; +using MES.Service.service.QcIssueResult; using MES.Service.util; using SqlSugar; +using System.Linq; +using System.Data; +using System.Net; +using System.Web; namespace MES.Service.service.QC; @@ -16,22 +22,49 @@ { var db = SqlSugarHelper.GetInstance(); var date = DateTime.Now.ToString("yyyy-MM-dd"); - var sql = - "select max(RELEASE_NO) from QS_ITEM_OQC_REQ where RELEASE_NO like 'RKJN%' and to_char(CREATE_DATE,'yyyy-mm-dd') ='" + - date + "'"; - - var maxBillNo = db.Ado.SqlQuerySingle<string>(sql); - - var number = "0001"; - if (maxBillNo != null) + + try { - maxBillNo = maxBillNo.Substring(12); - var no = Convert.ToInt32(maxBillNo); - no++; - number = no.ToString().PadLeft(4, '0'); - } + // 鏌ヨ褰撳ぉ鎵�鏈変互RKJY寮�澶寸殑妫�楠屽崟鍙� + var sql = @" + SELECT RELEASE_NO + FROM QS_ITEM_OQC_REQ + WHERE RELEASE_NO LIKE 'RKJY%' + AND TO_CHAR(CREATE_DATE,'yyyy-mm-dd') = @date + ORDER BY RELEASE_NO DESC"; - return "RKJN" + date.Replace("-", "") + number; + var existingNumbers = db.Ado.SqlQuery<string>(sql, new { date }); + + var number = "0001"; + if (existingNumbers != null && existingNumbers.Count > 0) + { + // 鎵惧埌鏈�澶х殑缂栧彿 + var maxNumber = existingNumbers + .Where(x => x != null && x.Length >= 16) // 纭繚闀垮害瓒冲 + .Select(x => x.Substring(12, 4)) + .Where(x => int.TryParse(x, out _)) + .Select(x => int.Parse(x)) + .DefaultIfEmpty(0) + .Max(); + + number = (maxNumber + 1).ToString().PadLeft(4, '0'); + } + + var result = "RKJY" + date.Replace("-", "") + number; + + // 娣诲姞鏃ュ織璁板綍锛堝彲閫夛級 + Console.WriteLine($"Generated RKJ number: {result}, Date: {date}, Existing count: {existingNumbers?.Count ?? 0}"); + + return result; + } + catch (Exception ex) + { + // 濡傛灉鍑虹幇寮傚父锛屼娇鐢ㄦ椂闂存埑浣滀负澶囬�夋柟妗� + var timestamp = DateTime.Now.ToString("yyyyMMddHHmmss"); + var fallbackNumber = "RKJY" + date.Replace("-", "") + timestamp.Substring(8, 4); + Console.WriteLine($"Error generating RKJ number, using fallback: {fallbackNumber}, Error: {ex.Message}"); + return fallbackNumber; + } } //閫夋嫨浜х嚎 @@ -48,16 +81,84 @@ .ToList(); } - - //鑾峰彇宸ュ崟鍙� - public List<RKJDaa001> GetDaa001s(string lineNo) + /// <summary> + /// 鑾峰彇鏈夌嚎浣撶殑閮ㄩ棬鍒楄〃锛堢敓浜ц溅闂达級 + /// </summary> + /// <returns>閮ㄩ棬鍒楄〃</returns> + public List<dynamic> GetDepartmentsWithLines() { var db = SqlSugarHelper.GetInstance(); - return db.Queryable<RKJDaa001>() - .Where(t => t.Daa020 == lineNo) - .OrderBy(t => t.ItemInId, OrderByType.Desc) + var sql = @" + SELECT DISTINCT + d.DEPARTMENTID as departmentid, + d.DEPARTMENTNAME as departmentname + FROM SYS_DEPARTMENT d + INNER JOIN MES_LINE l ON d.DEPARTMENTID = l.DEPOT_ID + WHERE L.LINE_NO IS NOT NULL + ORDER BY d.DEPARTMENTNAME"; + + return db.Ado.SqlQuery<dynamic>(sql); + } + + /// <summary> + /// 鏍规嵁閮ㄩ棬ID鑾峰彇璇ラ儴闂ㄤ笅鐨勭嚎浣撳垪琛� + /// </summary> + /// <param name="departmentId">閮ㄩ棬ID</param> + /// <returns>绾夸綋鍒楄〃</returns> + public List<dynamic> GetLinesByDepartment(string departmentId) + { + var db = SqlSugarHelper.GetInstance(); + var sql = @" + SELECT + l.LINE_NO as lineNo, + l.LINE_NAME as lineName + FROM MES_LINE l + WHERE l.DEPOT_ID = @departmentId + ORDER BY l.LINE_NAME"; + + return db.Ado.SqlQuery<dynamic>(sql, new { departmentId }); + } + + /// <summary> + /// 淇濆瓨閮ㄩ棬閫夋嫨 + /// </summary> + /// <param name="id">妫�楠屽崟ID</param> + /// <param name="departmentId">閮ㄩ棬ID</param> + /// <param name="departmentName">閮ㄩ棬鍚嶇О</param> + /// <returns>鎿嶄綔缁撴灉</returns> + public bool SaveDepartmentSelection(decimal id, string departmentId, string departmentName) + { + var db = SqlSugarHelper.GetInstance(); + var sql = @" + UPDATE QS_ITEM_OQC_REQ + SET WORK_SHOP = @departmentName, DEPARTMENT_ID = @departmentId + WHERE ID = @id"; + + return db.Ado.ExecuteCommand(sql, new { id, departmentId, departmentName }) > 0; + } + + + //鑾峰彇宸ュ崟鍙� + public List<Womdaa> GetDaa001s(string lineNo) + { + var db = SqlSugarHelper.GetInstance(); + return db.Queryable<Womdaa, MesItems>((w, m) => new JoinQueryInfos( + JoinType.Left, w.Daa002 == m.Id.ToString())) + .Where((w, m) => w.Daa015 == lineNo) + .OrderBy((w, m) => w.Daa001, OrderByType.Desc) + .Select((w, m) => new Womdaa + { + Id = w.Id, + Daa001 = w.Daa001, // 宸ュ崟鍙� + Daa002 = m.ItemNo, // 浜у搧缂栫爜锛堜粠MesItems琛ㄨ幏鍙栵級 + Daa003 = w.Daa003, // 浜у搧鍚嶇О + Daa004 = w.Daa004, // 浜у搧瑙勬牸 + Daa008 = w.Daa008, // 宸ュ崟鏁伴噺 + Daa015 = w.Daa015, // 鐢熶骇绾垮埆 + // 娣诲姞鐗╂枡ID瀛楁 + ItemId = m.Id // 鐗╂枡ID + }) .ToList(); - //return null; } //鏍规嵁妫�楠屾爣鍑嗘潵璁$畻妫�楠屼釜鏁� @@ -228,6 +329,55 @@ xj.CreateBy = userNo; xj.CreateDate = DateTime.Now; + + // 纭繚妫�楠屽崟鍙疯姝g‘璁剧疆 + if (string.IsNullOrEmpty(xj.ReleaseNo)) + { + xj.ReleaseNo = getMaxBillNo(); + } + + // 纭繚鐢熶骇绾跨紪鍙疯姝g‘璁剧疆 + if (string.IsNullOrEmpty(xj.LineNo) && !string.IsNullOrEmpty(xj.Daa015)) + { + xj.LineNo = xj.Daa015; + } + + // 纭繚宸ュ崟鍙疯姝g‘璁剧疆 + if (string.IsNullOrEmpty(xj.BillNo) && !string.IsNullOrEmpty(xj.RbillNo)) + { + xj.BillNo = xj.RbillNo; + } + + // 纭繚鐗╂枡ID琚纭缃紙濡傛灉涓虹┖锛屽皾璇曚粠鐗╂枡缂栫爜鑾峰彇锛� + if (xj.ItemId == null && !string.IsNullOrEmpty(xj.ItemNo)) + { + // 浠庣墿鏂欑紪鐮佽幏鍙栫墿鏂橧D + var itemId = db.Queryable<MesItems>() + .Where(m => m.ItemNo == xj.ItemNo) + .Select(m => m.Id) + .First(); + + if (itemId > 0) + { + xj.ItemId = itemId; + } + } + + // 鏂板锛氫繚瀛橀�佹鎵规 + if (!string.IsNullOrEmpty(rkjDto.RbillNo)) + xj.RbillNo = rkjDto.RbillNo; + + // 纭繚Quantity瀛楁琚纭缃� + if (xj.Quantity == null && rkjDto.quantity != null) + { + xj.Quantity = rkjDto.quantity; + } + + // 纭繚鎻愪氦鐘舵�佽姝g‘璁剧疆锛堥粯璁や负鏈彁浜わ級 + if (xj.Fsubmit == null) + { + xj.Fsubmit = 0; + } var pid = db.Insertable(xj).ExecuteReturnIdentity(); @@ -249,32 +399,32 @@ // var transaction = connection.BeginTransaction(); // // try - // { - // using (var command = new OracleCommand()) // { - // command.Connection = connection; - // command.Transaction = transaction; - // command.CommandText = "insert_and_update_picture_RKJ"; - // command.CommandType = CommandType.StoredProcedure; + // using (var command = new OracleCommand()) + // { + // command.Connection = connection; + // command.Transaction = transaction; + // command.CommandText = "insert_and_update_picture_RKJ"; + // command.CommandType = CommandType.StoredProcedure; // - // // Add parameters - // command.Parameters.Add("p_QS_TYPE", OracleDbType.Varchar2) - // .Value = "3"; - // command.Parameters.Add("p_MOID_NUM", OracleDbType.Varchar2) - // .Value = rkjDto.moidNum; - // command.Parameters.Add("p_pid", OracleDbType.Int32).Value = - // xj.Id; + // // Add parameters + // command.Parameters.Add("p_QS_TYPE", OracleDbType.Varchar2) + // .Value = "3"; + // command.Parameters.Add("p_MOID_NUM", OracleDbType.Varchar2) + // .Value = rkjDto.moidNum; + // command.Parameters.Add("p_pid", OracleDbType.Int32).Value = + // xj.Id; // - // command.ExecuteNonQuery(); + // command.ExecuteNonQuery(); + // } + // + // transaction.Commit(); // } - // - // transaction.Commit(); - // } - // catch (Exception) - // { - // transaction.Rollback(); - // throw; - // } + // catch (Exception) + // { + // transaction.Rollback(); + // throw; + // } // } rkjDto.items = GetItems(xj.Id, null); @@ -454,42 +604,64 @@ { var db = SqlSugarHelper.GetInstance(); + var id = Convert.ToDecimal(queryObj.id); + + string[]? lineNo = null; + + if (StringUtil.IsNotNullOrEmpty(queryObj.createUser)) + lineNo = _baseService.getUserLineNo(queryObj.createUser); + return db - .Queryable<QsItemOqcReq, Womdaa, MesItems, MesInvItemIns, Womdab, - MesInvTransaction, RKJDaa001>( - (a, da, b, c, d, ca, m) => new JoinQueryInfos( + .Queryable<QsItemOqcReq, Womdaa, MesItems>((a, da, b) => + new JoinQueryInfos( JoinType.Left, da.Daa001 == a.BillNo, - JoinType.Left, a.ItemId == b.Id, - JoinType.Left, a.BillNo == c.BillNo, - JoinType.Left, c.CbillNo == d.Dab001, - JoinType.Left, - c.TransctionNo == ca.TransactionNo.ToString() && - c.Company == ca.Company && c.Factory == ca.Factory, - JoinType.Left, c.Id == m.ItemInId && a.ItemNo == m.ItemNo + JoinType.Left, a.ItemId == b.Id )) - .Select((a, da, b, c, d, ca, m) => new QsItemOqcReq + .WhereIF(lineNo != null && lineNo.Length > 0, + (a, da, b) => lineNo.Contains(da.Daa015)) + .WhereIF( + StringUtil.IsNotNullOrEmpty(queryObj.result) && + "鏈畬鎴�".Equals(queryObj.result), + (a, da, b) => 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) + // 娣诲姞fsubmit瀛楁杩囨护閫昏緫 + .WhereIF( + StringUtil.IsNotNullOrEmpty(queryObj.fsubmit) && queryObj.fsubmit == "1", + (a, da, b) => a.Fsubmit == 1) + .WhereIF( + StringUtil.IsNullOrEmpty(queryObj.fsubmit) || queryObj.fsubmit == "0", + (a, da, b) => a.Fsubmit == 0 || a.Fsubmit == null) + .Select((a, da, b) => new QsItemOqcReq { - BillNo = a.BillNo, - Remarks = a.Remarks, Id = a.Id, - CreateDate = a.CreateDate, + ReleaseNo = a.ReleaseNo, CreateBy = a.CreateBy, - FcheckResu = a.FcheckResu, + CreateDate = a.CreateDate, + BillNo = a.BillNo, + RbillNo = a.RbillNo, ItemNo = a.ItemNo, + ItemId = a.ItemId, + LineNo = a.LineNo, + FcheckResu = a.FcheckResu, FcheckBy = a.FcheckBy, FcheckDate = a.FcheckDate, - ReleaseNo = a.ReleaseNo, - // 娣诲姞鍏朵粬瀛楁 - // 濡傛灉鍦� QsItemOqcReq 涓畾涔変簡棰濆瀛楁锛屽垯闇�瑕佸皢瀹冧滑璧嬪�� - // 渚嬪: + Remarks = a.Remarks, + WorkShop = a.WorkShop, + DepartmentId = a.DepartmentId, + Fsubmit = a.Fsubmit, // 娣诲姞fsubmit瀛楁鍒拌繑鍥炵粨鏋� + Blyy = a.Blyy, // 娣诲姞涓嶈壇鍘熷洜瀛楁 + Pszt = a.Pszt, // 娣诲姞璇勫鐘舵�佸瓧娈� + Sscj = a.Sscj, // 娣诲姞鎵�灞炶溅闂村瓧娈� + FngDesc = a.FngDesc, // 娣诲姞涓嶈壇鎻忚堪瀛楁 + // 浠庡叧鑱旇〃鑾峰彇鐨勫瓧娈� ItemName = b.ItemName, ItemModel = b.ItemModel, - TaskNo = c.TaskNo, - CbillNo = c.CbillNo, - Dab001 = d.Dab001, Daa015 = da.Daa015, - LineNo = c.LineNo, - Quantity = m.Quantity + Quantity = a.Quantity }).OrderBy(a => a.CreateDate, OrderByType.Desc) .ToPageList(queryObj.PageIndex, queryObj.Limit); } @@ -644,4 +816,343 @@ return Convert.ToInt32(rkjDto.gid); } + + /// <summary> + /// 鎻愪氦妫�楠屽崟 + /// </summary> + /// <param name="id">妫�楠屽崟ID</param> + /// <param name="userNo">鎻愪氦鐢ㄦ埛</param> + /// <returns>鏇存柊缁撴灉</returns> + public int SubmitInspection(decimal id, string userNo) + { + return SqlSugarHelper.UseTransactionWithOracle(db => + { + // 鑾峰彇妫�楠屽崟璇︾粏淇℃伅 + var inspectionData = db.Queryable<QsItemOqcReq>() + .Where(it => it.Id == id) + .First(); + + if (inspectionData == null) + { + throw new Exception("妫�楠屽崟涓嶅瓨鍦�"); + } + + // 妫�鏌ラ拤閽夋帹閫佹潯浠讹細PSZT涓哄緟鍒わ紝涓斾笉鑹師鍥犮�佷笉鑹弿杩般�佹墍灞炶溅闂翠笉涓虹┖ + bool shouldPushToDingTalk = inspectionData.Pszt == "寰呭垽" && + !string.IsNullOrEmpty(inspectionData.Blyy) && + !string.IsNullOrEmpty(inspectionData.FngDesc) && + !string.IsNullOrEmpty(inspectionData.Sscj); + + // 濡傛灉婊¤冻鎺ㄩ�佹潯浠讹紝鍒欐帹閫佸埌閽夐拤 + if (shouldPushToDingTalk) + { + try + { + // 鏋勫缓閽夐拤鎺ㄩ�佹暟鎹� + var dingTalkData = new GetQcIssueResultDetail + { + FbatchQty = inspectionData.Quantity?.ToString(), // 閫佹鏁伴噺 + ItemName = inspectionData.ItemName, + ItemNo = inspectionData.ItemNo, + SuppName = "鐢熶骇鍏ュ簱", // 鍥哄畾鍊� + AppicationReason = inspectionData.FngDesc, // 涓嶈壇鎻忚堪 + BadReason = inspectionData.Blyy, // 涓嶈壇鍘熷洜 + remark = inspectionData.Remarks, + ReleaseNo = inspectionData.ReleaseNo, + StaffNo = userNo, + IqcStatus = inspectionData.Pszt, // 璇勫鐘舵�� + Department = inspectionData.Sscj, // 浣跨敤鎵�灞炶溅闂翠綔涓洪儴闂� + WorkShop = inspectionData.Sscj, // 鎵�灞炶溅闂� + EMERGENCY = "0" // 鍥哄畾鍊间负0 + }; + + // 璋冪敤閽夐拤鎺ㄩ�佹湇鍔� + var qcIssueResultManager = new QcIssueResultManager(); + string dingTalkResult = qcIssueResultManager.GetProcessNo(dingTalkData, "RKJ"); + + // 瑙f瀽閽夐拤杩斿洖缁撴灉锛岃幏鍙栨祦绋嬪疄渚婭D + if (dingTalkResult.Contains("閽夐拤宸ヤ綔娴佸疄渚嬪惎鍔ㄦ垚鍔�")) + { + // 鎻愬彇instanceId + int startIndex = dingTalkResult.IndexOf("\"InstanceId\":\"") + 14; + int endIndex = dingTalkResult.IndexOf("\"", startIndex); + if (startIndex > 13 && endIndex > startIndex) + { + string instanceId = dingTalkResult.Substring(startIndex, endIndex - startIndex); + + // 淇濆瓨閽夐拤娴佺▼淇℃伅 + qcIssueResultManager.SaveProcessNo( + inspectionData.ReleaseNo, + instanceId, + userNo, + inspectionData.Sscj, + inspectionData.Pszt + ); + } + } + } + catch (Exception ex) + { + // 閽夐拤鎺ㄩ�佸け璐ヤ笉褰卞搷妫�楠屾彁浜わ紝鍙褰曟棩蹇� + Console.WriteLine($"閽夐拤鎺ㄩ�佸け璐�: {ex.Message}"); + } + } + + // 鏇存柊妫�楠屽崟鐘舵�� + return db.Updateable<QsItemOqcReq>() + .SetColumns(it => it.Fsubmit == 1) // 璁剧疆鎻愪氦鐘舵�佷负1锛堝凡鎻愪氦锛� + .SetColumns(it => it.FcheckBy == userNo) // 璁剧疆妫�楠屼汉 + .SetColumns(it => it.FcheckDate == DateTime.Now) // 璁剧疆妫�楠屾椂闂� + .Where(it => it.Id == id) + .ExecuteCommand(); + }); + } + + /// <summary> + /// 鍒锋柊妫�楠岄」鐩� - 璋冪敤瀛樺偍杩囩▼ + /// </summary> + /// <param name="id">妫�楠屽崟ID</param> + /// <param name="no">妫�楠屽崟鍙�</param> + /// <param name="user">鐢ㄦ埛</param> + /// <returns>鍒锋柊缁撴灉</returns> + public (int result, string message) GenUpdate(decimal? id, string? no, string? user) + { + var outputResult = new SugarParameter("PO_RESULT", null, System.Data.DbType.Int32, ParameterDirection.Output, 4000); + var outputMessage = new SugarParameter("PO_TEXT", null, System.Data.DbType.String, ParameterDirection.Output, 4000); + + var parameters = new List<SugarParameter> + { + new("P_ID", id, System.Data.DbType.Decimal, ParameterDirection.Input), + new("P_NO", no, System.Data.DbType.String, ParameterDirection.Input), + new("P_USER", user, System.Data.DbType.String, ParameterDirection.Input), + outputResult, + outputMessage + }; + + var db = SqlSugarHelper.GetInstance(); + db.Ado.ExecuteCommand( + "BEGIN PRC_GEN_UPDATE3(:P_ID, :P_NO, :P_USER, :PO_RESULT, :PO_TEXT); END;", + parameters.ToArray()); + + int result = outputResult.Value == null ? -1 : Convert.ToInt32(outputResult.Value); + string message = outputMessage.Value?.ToString() ?? ""; + + return (result, message); + } + + /// <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鏈嶅姟鍣ㄨ幏鍙栨枃浠� + /// </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鏂囦欢璺緞 - RKJ浣跨敤FQC鏂囦欢澶� + string ftpPath = $"{normalizedServer}/FQC/{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($"鑾峰彇FTP鏂囦欢澶辫触: {ex.Message}"); + } + } + + /// <summary> + /// 鑾峰彇鏂囦欢鍐呭绫诲瀷 + /// </summary> + /// <param name="fileName">鏂囦欢鍚�</param> + /// <returns>鍐呭绫诲瀷</returns> + public string GetContentType(string fileName) + { + if (string.IsNullOrEmpty(fileName)) + return "application/octet-stream"; + + var extension = System.IO.Path.GetExtension(fileName).ToLowerInvariant(); + return extension switch + { + ".pdf" => "application/pdf", + ".jpg" or ".jpeg" => "image/jpeg", + ".png" => "image/png", + ".gif" => "image/gif", + ".bmp" => "image/bmp", + ".txt" => "text/plain", + ".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", + _ => "application/octet-stream" + }; + } + + /// <summary> + /// 鏍囧噯鍖朏TP鏈嶅姟鍣ㄥ湴鍧� + /// </summary> + /// <param name="ftpServer">FTP鏈嶅姟鍣ㄥ湴鍧�</param> + /// <returns>鏍囧噯鍖栧悗鐨勫湴鍧�</returns> + private string NormalizeFtpServer(string ftpServer) + { + if (string.IsNullOrEmpty(ftpServer)) + throw new ArgumentException("FTP鏈嶅姟鍣ㄥ湴鍧�涓嶈兘涓虹┖"); + + // 绉婚櫎鍙兘鐨勫崗璁墠缂� + var normalized = ftpServer.Trim(); + if (normalized.StartsWith("ftp://", StringComparison.OrdinalIgnoreCase)) + { + normalized = normalized.Substring(6); + } + else if (normalized.StartsWith("ftps://", StringComparison.OrdinalIgnoreCase)) + { + normalized = normalized.Substring(7); + } + + // 纭繚浠tp://寮�澶� + if (!normalized.StartsWith("ftp://", StringComparison.OrdinalIgnoreCase)) + { + normalized = "ftp://" + normalized; + } + + return normalized; + } + + /// <summary> + /// 淇濆瓨涓嬫媺妗嗗瓧娈碉紙涓嶈壇鍘熷洜銆佽瘎瀹$姸鎬併�佹墍灞炶溅闂达級 + /// </summary> + /// <param name="dto">鍖呭惈瀛楁鏁版嵁鐨凞TO</param> + /// <returns>鏇存柊缁撴灉</returns> + public int SaveDropdownFields(RKJDto dto) + { + return SqlSugarHelper.UseTransactionWithOracle(db => + { + return db.Updateable<QsItemOqcReq>() + .SetColumns(it => it.Blyy == dto.BLYY) + .SetColumns(it => it.Pszt == dto.PSZT) + .SetColumns(it => it.Sscj == dto.SSCJ) + .Where(it => it.ReleaseNo == dto.releaseNo) + .ExecuteCommand(); + }); + } + + /// <summary> + /// 淇濆瓨涓嶈壇鎻忚堪 + /// </summary> + /// <param name="gid">妫�楠屽崟ID</param> + /// <param name="fngDesc">涓嶈壇鎻忚堪</param> + /// <returns>鏇存柊缁撴灉</returns> + public int SaveFngDesc(decimal gid, string fngDesc) + { + return SqlSugarHelper.UseTransactionWithOracle(db => + { + return db.Updateable<QsItemOqcReq>() + .SetColumns(it => it.FngDesc == fngDesc) + .Where(it => it.Id == gid) + .ExecuteCommand(); + }); + } } \ No newline at end of file -- Gitblit v1.9.3