From 30c1248ee88dfff420181b145db5c8529163b067 Mon Sep 17 00:00:00 2001 From: cnf <3200815559@qq.com> Date: 星期一, 28 四月 2025 20:56:56 +0800 Subject: [PATCH] 异常处置单接收测试增加,逻辑未写 --- StandardInterface/MESApplication/Controllers/QcIssueResult/QcIssueResultController.cs | 135 +++++ StandardInterface/MES.Service/Modes/QcIssueResult/DingNameCode.cs | 21 StandardInterface/MES.Service/Dto/webApi/QcIssueResult/QcIssueResult.cs | 12 StandardInterface/MES.Service/service/PLM/WarehouseDownloadDoc.cs | 145 ++++++ StandardInterface/MES.Service/Modes/QcIssueResult/UpdateMesQaItems .cs | 36 + StandardInterface/MES.Service/MES.Service.csproj | 6 StandardInterface/MES.Service/Dto/webApi/QcIssueResult/ErpQcIssueResult.cs | 57 ++ StandardInterface/MESApplication/Controllers/PLM/PLMController.cs | 125 +++++ StandardInterface/MES.Service/Dto/webApi/PLM/RelatedObject.cs | 17 StandardInterface/MES.Service/Modes/QcIssueResult/QcIssueResults.cs | 34 + StandardInterface/MES.Service/service/QcIssueResult/QcIssueResultManager.cs | 516 ++++++++++++++++++++++ StandardInterface/MES.Service/Dto/webApi/PLM/BaseObject.cs | 12 StandardInterface/MES.Service/Dto/webApi/PLM/StdDocument.cs | 23 + StandardInterface/MES.Service/Modes/QcIssueResult/GetQcIssueResultDetail.cs | 40 + StandardInterface/MES.Service/service/PLM/PLMManager.cs | 189 ++++++++ 15 files changed, 1,368 insertions(+), 0 deletions(-) diff --git a/StandardInterface/MES.Service/Dto/webApi/PLM/BaseObject.cs b/StandardInterface/MES.Service/Dto/webApi/PLM/BaseObject.cs new file mode 100644 index 0000000..5794080 --- /dev/null +++ b/StandardInterface/MES.Service/Dto/webApi/PLM/BaseObject.cs @@ -0,0 +1,12 @@ +锘� +namespace MES.Service.Dto.webApi.PLM; + +public class BaseObject +{ + //瀹炰綋涓婚敭 + public long? FID { get; set; } + //缂栫爜 + public string? FCode { get; set; } + //鍚嶇О + public string? FName { get; set; } +} diff --git a/StandardInterface/MES.Service/Dto/webApi/PLM/RelatedObject.cs b/StandardInterface/MES.Service/Dto/webApi/PLM/RelatedObject.cs new file mode 100644 index 0000000..cdee91e --- /dev/null +++ b/StandardInterface/MES.Service/Dto/webApi/PLM/RelatedObject.cs @@ -0,0 +1,17 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MES.Service.Dto.webApi.PLM; + +public class RelatedObject +{ + //瀹炰綋涓婚敭 + public long? FID { get; set; } + //鐗╂枡缂栫爜 + public string? FRE_FCode { get; set; } + //鐩稿叧瀵硅薄 + public long? FRelatedObject { get; set; } +} diff --git a/StandardInterface/MES.Service/Dto/webApi/PLM/StdDocument.cs b/StandardInterface/MES.Service/Dto/webApi/PLM/StdDocument.cs new file mode 100644 index 0000000..151a151 --- /dev/null +++ b/StandardInterface/MES.Service/Dto/webApi/PLM/StdDocument.cs @@ -0,0 +1,23 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MES.Service.Dto.webApi.PLM; + +public class StdDocument +{ + //瀹炰綋涓婚敭 + public long? FID { get; set; } + //缂栫爜 + public string? FCode { get; set; } + //鍚嶇О + public string? FName { get; set; } + //鐗╃悊鏂囦欢鍚� + public string? FPhysicalFileName { get; set; } + //鐗╃悊鏂囦欢 + public string? FFileId { get; set; } + //鍏宠仈瀵硅薄 杞殑 pdf + public string? FRelevantObject { get; set; } +} diff --git a/StandardInterface/MES.Service/Dto/webApi/QcIssueResult/ErpQcIssueResult.cs b/StandardInterface/MES.Service/Dto/webApi/QcIssueResult/ErpQcIssueResult.cs new file mode 100644 index 0000000..3bec48a --- /dev/null +++ b/StandardInterface/MES.Service/Dto/webApi/QcIssueResult/ErpQcIssueResult.cs @@ -0,0 +1,57 @@ +锘縰sing Newtonsoft.Json; +using System.Collections.Generic; + +public class ErpQcIssueResult +{ + + public string? ProcessNo { get; set; } + + + public string? FReview { get; set; } + + + public string? QcStatus { get; set; } // 鍘烸CSTATU鏀逛负瑙勮寖鍛藉悕 + + // 鏂板鍚堝苟瀛楁 + + public string? Remark { get; set; } + + + public int? ApplicationQuantity { get; set; } // 淇濇寔鍙┖鎬� + + + public string? Reason { get; set; } + + + public string? BadCauses { get; set; } + + + public string? AffiliatedWorkshop { get; set; } + + + public string? ItemName { get; set; } + + + public string? SupplierName { get; set; } + + + public string? ItemNo { get; set; } + + + public List<Applicant> Applicants { get; set; } = new List<Applicant>(); + + public List<ApplicationDepartment> ApplicationDepartments { get; set; } = new List<ApplicationDepartment>(); +} + +// 淇濇寔鍘熸湁宓屽绫诲畾涔� +public class Applicant +{ + + public string? applicant { get; set; } // 缁熶竴鍙┖鎬� +} + +public class ApplicationDepartment +{ + + public string? applicationdepartment { get; set; } +} \ No newline at end of file diff --git a/StandardInterface/MES.Service/Dto/webApi/QcIssueResult/QcIssueResult.cs b/StandardInterface/MES.Service/Dto/webApi/QcIssueResult/QcIssueResult.cs new file mode 100644 index 0000000..6ce15a0 --- /dev/null +++ b/StandardInterface/MES.Service/Dto/webApi/QcIssueResult/QcIssueResult.cs @@ -0,0 +1,12 @@ +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MES.Service.Dto.webApi.QcIssueResult; + +public class QcIssueResult +{ + public ErpQcIssueResult ErpQcIssueResult { get; set; } +} diff --git a/StandardInterface/MES.Service/MES.Service.csproj b/StandardInterface/MES.Service/MES.Service.csproj index 89bbd58..5f0ecb4 100644 --- a/StandardInterface/MES.Service/MES.Service.csproj +++ b/StandardInterface/MES.Service/MES.Service.csproj @@ -7,7 +7,13 @@ </PropertyGroup> <ItemGroup> + <PackageReference Include="AlibabaCloud.SDK.Dingtalk" Version="2.1.99" /> <PackageReference Include="Masuit.Tools.Core" Version="2024.3.4" /> + <PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.4" /> + <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="9.0.4" /> + <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.4" /> + <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" /> + <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="SqlSugarCore" Version="5.1.4.158" /> </ItemGroup> diff --git a/StandardInterface/MES.Service/Modes/QcIssueResult/DingNameCode.cs b/StandardInterface/MES.Service/Modes/QcIssueResult/DingNameCode.cs new file mode 100644 index 0000000..a2b7663 --- /dev/null +++ b/StandardInterface/MES.Service/Modes/QcIssueResult/DingNameCode.cs @@ -0,0 +1,21 @@ +锘縰sing SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MES.Service.Modes.QcIssueResult; + +//閽夐拤鐢ㄦ埛鍐呯爜瀵瑰簲琛� +[SugarTable("MES_DINGDING_NAME_CODE")] +internal class DingNameCode +{ + //閽夐拤鐢ㄦ埛鍐呯爜 + [SugarColumn(ColumnName = "DINGDINGCODE")] + public string? DingDingCode { get; set; } + + //閽夐拤鐢ㄦ埛鍚嶇О + [SugarColumn(ColumnName = "DINGDINGNAME")] + public string? DingDingName { get; set; } +} diff --git a/StandardInterface/MES.Service/Modes/QcIssueResult/GetQcIssueResultDetail.cs b/StandardInterface/MES.Service/Modes/QcIssueResult/GetQcIssueResultDetail.cs new file mode 100644 index 0000000..9ffc23e --- /dev/null +++ b/StandardInterface/MES.Service/Modes/QcIssueResult/GetQcIssueResultDetail.cs @@ -0,0 +1,40 @@ +锘縰sing SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MES.Service.Modes.QcIssueResult; + +public class GetQcIssueResultDetail +{ + //鏁伴噺 + + public string? FbatchQty { get; set; } + + //浜у搧鍚嶇О + + public string? ItemName { get; set; } + + //瑙勬牸鍨嬪彿 + + public string? ItemModel { get; set; } + + //閫佹鍗曚綅 + + public string? SuppName { get; set; } + + //璁㈠崟鍙�(閲囪喘鍗曞彿) + public string? CgOrder { get; set; } + + //瀵逛笉鍚堟牸鎴栨綔鍦ㄤ笉鍚堟牸鐨勬弿杩� + public string? remark { get; set; } + + //妫�楠屽崟鍙� + public string? ReleaseNo { get; set; } + + //鐢ㄦ埛鍚嶇О + public string? Fname { get; set; } + +} diff --git a/StandardInterface/MES.Service/Modes/QcIssueResult/QcIssueResults.cs b/StandardInterface/MES.Service/Modes/QcIssueResult/QcIssueResults.cs new file mode 100644 index 0000000..e17e4f8 --- /dev/null +++ b/StandardInterface/MES.Service/Modes/QcIssueResult/QcIssueResults.cs @@ -0,0 +1,34 @@ +锘縰sing SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MES.Service.Modes.QcIssueResult; + +//寮傚父澶勭疆鍗曠粨鏋滆〃 +[SugarTable("MES_QCISSUE_RESULT")] +public class QcIssueResults +{ + //SEQ_MES_SCZZD + [SugarColumn(ColumnName = "ID", IsPrimaryKey = true, OracleSequenceName = "SEQ_QCISSUE_RESULT")] + public decimal Id { get; set; } + + //閫佽揣鍗曞彿 + [SugarColumn(ColumnName = "RELEASE_NO")] + public string? ReleaseNo { get; set; } + + //閫佽揣鍗曞彿 + [SugarColumn(ColumnName = "PROCESSNO")] + public string? ProcessNo { get; set; } + + //渚涘簲鍟� + [SugarColumn(ColumnName = "FREVIEW")] + public string? FReview { get; set; } + + //渚涘簲鍟� + [SugarColumn(ColumnName = "QCSTATU")] + public string? QcStatu { get; set; } + +} diff --git a/StandardInterface/MES.Service/Modes/QcIssueResult/UpdateMesQaItems .cs b/StandardInterface/MES.Service/Modes/QcIssueResult/UpdateMesQaItems .cs new file mode 100644 index 0000000..d9880f6 --- /dev/null +++ b/StandardInterface/MES.Service/Modes/QcIssueResult/UpdateMesQaItems .cs @@ -0,0 +1,36 @@ +锘縰sing SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MES.Service.Modes.QcIssueResult; + +[SugarTable("MES_QA_ITEMS_DETECT_01")] +public class UpdateMesQaItems +{ + [SugarColumn(ColumnName = "ID", OracleSequenceName = "SEQ_QM_ID", + IsPrimaryKey = true)] + public decimal Id { get; set; } + //閫佽揣鍗曞彿 + [SugarColumn(ColumnName = "RELEASE_NO")] + public string? ReleaseNo { get; set; } + + //閫佽揣鍗曞彿 + [SugarColumn(ColumnName = "FNG_HANDLE")] + public string? FngHandle { get; set; } + + //閫佽揣鍗曞彿 + [SugarColumn(ColumnName = "FMRMODE")] + public string? FMRMODE { get; set; } + + //閫佽揣鍗曞彿 + [SugarColumn(ColumnName = "IS_SJ")] + public decimal? ISSJ { get; set; } + + //閫佽揣鍗曞彿 + [SugarColumn(ColumnName = "SJ_NO")] + public string? SJ_NO { get; set; } + +} diff --git a/StandardInterface/MES.Service/service/PLM/PLMManager.cs b/StandardInterface/MES.Service/service/PLM/PLMManager.cs new file mode 100644 index 0000000..9a0bc58 --- /dev/null +++ b/StandardInterface/MES.Service/service/PLM/PLMManager.cs @@ -0,0 +1,189 @@ +锘縰sing Kingdee.CDP.WebApi.SDK; +using MES.Service.Dto.webApi.PLM; +using System.Diagnostics; +using System.Text; + +namespace MES.Service.service.PLM; + +public class PLMManager +{ + public List<StdDocument> RetrieveDrawings(string ItemNo) + { + List<BaseObject> baseObjects = GetPlmCfgBase(ItemNo); + Debug.WriteLine($"绗竴瀹屾暣鍐呭锛圝SON锛�: {Newtonsoft.Json.JsonConvert.SerializeObject(baseObjects, Newtonsoft.Json.Formatting.Indented)}"); + + // 妫�鏌ヨ繑鍥炵粨鏋滄槸鍚︿负绌� + if (baseObjects == null || !baseObjects.Any()) + { + throw new NotImplementedException("杩斿洖缁撴灉涓虹┖"); + } + else + { + List<RelatedObject> relatedObjects = GetPlmCfgRelatedObject(baseObjects[0].FID); + Debug.WriteLine($"绗簩瀹屾暣鍐呭锛圝SON锛�: {Newtonsoft.Json.JsonConvert.SerializeObject(relatedObjects, Newtonsoft.Json.Formatting.Indented)}"); + + // 妫�鏌ヨ繑鍥炵粨鏋滄槸鍚︿负绌� + if (relatedObjects == null || !relatedObjects.Any()) + { + throw new NotImplementedException("杩斿洖缁撴灉涓虹┖"); + } + List<StdDocument> stdDocuments = GetPlmStdDocument(relatedObjects); + return stdDocuments; + } + + } + + #region 1.閫氳繃鐗╂枡缂栫爜锛堥渶瑕佸敮涓�锛夎幏鍙栫墿鏂檌d + public List<BaseObject> GetPlmCfgBase(string ItemNo) + { + //娉ㄦ剰 1锛氭澶勪笉鍐嶄娇鐢ㄥ弬鏁板舰寮忎紶鍏ョ敤鎴峰悕鍙婂瘑鐮佺瓑鏁忔劅淇℃伅锛屾敼涓哄湪鐧诲綍閰嶇疆鏂囦欢涓缃�� + //娉ㄦ剰 2锛氬繀椤诲厛閰嶇疆绗笁鏂圭郴缁熺櫥褰曟巿鏉冧俊鎭悗锛屽啀杩涜涓氬姟鎿嶄綔锛岃鎯呭弬鑰冨悇璇█鐗堟湰SDK浠嬬粛涓殑鐧诲綍閰嶇疆鏂囦欢璇存槑銆� + //璇诲彇閰嶇疆锛屽垵濮嬪寲SDK + K3CloudApi client = new K3CloudApi(); + //鐢ㄤ簬璁板綍缁撴灉 + StringBuilder Info = new StringBuilder(); + //涓氬姟瀵硅薄鏍囪瘑 + //string formId = "PLM_STD_DOCUMENT"; + string formId = "PLM_CFG_BASE"; + DateTime dt = DateTime.Now; + //鏌ヨ瀛楁闆嗗悎锛屽嵆杩斿洖鍝簺鏁版嵁锛屼笉鑳戒负绌猴紝鏍规嵁涓嶅悓涓氬姟鍗曟嵁濉啓涓嶅悓鐨勫瓧娈靛悕锛屼互涓嬩粎涓虹ず渚� + //string fieldKeys = "FCode,FFileId,FRelevantObject"; + //string FilterString = "FID='-2146304'"; + string fieldKeys = "FID,FCode,FName"; + string FilterString = string.Format(@"FCode='{0}'", ItemNo); + string OrderString = ""; + int TopRowCount = 0; + int StartRow = 0; + int Limit = 0; + + var param = new QueryParam() + { + FormId = formId, + FieldKeys = fieldKeys, + FilterString = FilterString, + OrderString = OrderString, + TopRowCount = TopRowCount, + StartRow = StartRow, + Limit = Limit + }; + //璋冪敤鎺ュ彛 + var result = client.ExecuteBillQuery(param.ToJson()); + Debug.WriteLine($"绗竴涓厓绱犲唴瀹�: {result}"); + + return result.Select(s => + { + var entity = new BaseObject + { + FID = (long)s[0], + FCode = (string)s[1], + FName = (string)s[2], + }; + return entity; + }).ToList(); + } + #endregion + + #region 2.閫氳繃鐗╂枡id鑾峰彇鐩稿叧瀵硅薄銆愪笅杞介渶瑕佺殑鏂囨。銆戠殑id + public List<RelatedObject> GetPlmCfgRelatedObject(long? FRelatedObject) + { + //娉ㄦ剰 1锛氭澶勪笉鍐嶄娇鐢ㄥ弬鏁板舰寮忎紶鍏ョ敤鎴峰悕鍙婂瘑鐮佺瓑鏁忔劅淇℃伅锛屾敼涓哄湪鐧诲綍閰嶇疆鏂囦欢涓缃�� + //娉ㄦ剰 2锛氬繀椤诲厛閰嶇疆绗笁鏂圭郴缁熺櫥褰曟巿鏉冧俊鎭悗锛屽啀杩涜涓氬姟鎿嶄綔锛岃鎯呭弬鑰冨悇璇█鐗堟湰SDK浠嬬粛涓殑鐧诲綍閰嶇疆鏂囦欢璇存槑銆� + //璇诲彇閰嶇疆锛屽垵濮嬪寲SDK + K3CloudApi client = new K3CloudApi(); + //鐢ㄤ簬璁板綍缁撴灉 + StringBuilder Info = new StringBuilder(); + //涓氬姟瀵硅薄鏍囪瘑 + //string formId = "PLM_STD_DOCUMENT"; + string formId = "PLM_CFG_RELATEDOBJECT"; + DateTime dt = DateTime.Now; + //鏌ヨ瀛楁闆嗗悎锛屽嵆杩斿洖鍝簺鏁版嵁锛屼笉鑳戒负绌猴紝鏍规嵁涓嶅悓涓氬姟鍗曟嵁濉啓涓嶅悓鐨勫瓧娈靛悕锛屼互涓嬩粎涓虹ず渚� + //string fieldKeys = "FCode,FFileId,FRelevantObject"; + //string FilterString = "FID='-2146304'"; + string fieldKeys = "FID,FRE_FCode,FRelatedObject"; + string FilterString = string.Format(@"FRelatedObject='{0}'", FRelatedObject); + string OrderString = ""; + int TopRowCount = 0; + int StartRow = 0; + int Limit = 0; + + var param = new QueryParam() + { + FormId = formId, + FieldKeys = fieldKeys, + FilterString = FilterString, + OrderString = OrderString, + TopRowCount = TopRowCount, + StartRow = StartRow, + Limit = Limit + }; + //璋冪敤鎺ュ彛 + var result = client.ExecuteBillQuery(param.ToJson()); + Debug.WriteLine(result); + + return result.Select(s => + { + var entity = new RelatedObject + { + FID = (long)s[0], + FRE_FCode = (string)s[1], + FRelatedObject = (long)s[2], + }; + return entity; + }).ToList(); + } + #endregion + + #region 3.鏍规嵁鏂囨。id鑾峰彇鏂囨。鐗╃悊鏂囦欢id + public List<StdDocument> GetPlmStdDocument(List<RelatedObject> relatedObjects) + { + //娉ㄦ剰 1锛氭澶勪笉鍐嶄娇鐢ㄥ弬鏁板舰寮忎紶鍏ョ敤鎴峰悕鍙婂瘑鐮佺瓑鏁忔劅淇℃伅锛屾敼涓哄湪鐧诲綍閰嶇疆鏂囦欢涓缃�� + //娉ㄦ剰 2锛氬繀椤诲厛閰嶇疆绗笁鏂圭郴缁熺櫥褰曟巿鏉冧俊鎭悗锛屽啀杩涜涓氬姟鎿嶄綔锛岃鎯呭弬鑰冨悇璇█鐗堟湰SDK浠嬬粛涓殑鐧诲綍閰嶇疆鏂囦欢璇存槑銆� + //璇诲彇閰嶇疆锛屽垵濮嬪寲SDK + K3CloudApi client = new K3CloudApi(); + //鐢ㄤ簬璁板綍缁撴灉 + StringBuilder Info = new StringBuilder(); + //涓氬姟瀵硅薄鏍囪瘑 + string formId = "PLM_STD_DOCUMENT"; + DateTime dt = DateTime.Now; + //鏌ヨ瀛楁闆嗗悎锛屽嵆杩斿洖鍝簺鏁版嵁锛屼笉鑳戒负绌猴紝鏍规嵁涓嶅悓涓氬姟鍗曟嵁濉啓涓嶅悓鐨勫瓧娈靛悕锛屼互涓嬩粎涓虹ず渚� + string fieldKeys = "FID,FCode,FName,FPhysicalFileName,FFileId,FRelevantObject"; + // 鎻愬彇 FID 鍊� + var fidList = relatedObjects.Select(obj => obj.FID.ToString()).ToList(); + // 灏� FID 鍊肩敤閫楀彿鍒嗛殧锛屽苟鍖呰9鍦ㄥ崟寮曞彿涓� + string fids = string.Join(",", fidList.Select(fid => $"'{fid}'")); + // 鏋勫缓 FilterString + string FilterString = $"FID in ({fids})"; + string OrderString = ""; + int TopRowCount = 0; + int StartRow = 0; + int Limit = 0; + + var param = new QueryParam() + { + FormId = formId, + FieldKeys = fieldKeys, + FilterString = FilterString, + OrderString = OrderString, + TopRowCount = TopRowCount, + StartRow = StartRow, + Limit = Limit + }; + //璋冪敤鎺ュ彛 + var result = client.ExecuteBillQuery(param.ToJson()); + + return result.Select(s => + { + var entity = new StdDocument + { + FID = (long)s[0], + FCode = (string)s[1], + FName = (string)s[2], + FPhysicalFileName = (string)s[3], + FFileId = (string)s[4], + FRelevantObject = (string)s[5], + }; + return entity; + }).ToList(); + } + #endregion +} diff --git a/StandardInterface/MES.Service/service/PLM/WarehouseDownloadDoc.cs b/StandardInterface/MES.Service/service/PLM/WarehouseDownloadDoc.cs new file mode 100644 index 0000000..748ea0a --- /dev/null +++ b/StandardInterface/MES.Service/service/PLM/WarehouseDownloadDoc.cs @@ -0,0 +1,145 @@ +锘縰sing Newtonsoft.Json.Linq; +using System.Net; +using System.Text; + +namespace ConsoleApp1 +{ + #region 1.鏍规嵁鏂囨。鐗╃悊鏂囦欢id鑾峰彇鏂囨。娴佹暟鎹� + public class WarehouseDownloadDoc() + { + private string _cloudUrl = "http://121.36.245.199/k3cloud"; + private string _warehouse = "http://192.168.30.251/CloudPLMWarehouse"; + + #region 鏂囨。鏈嶅姟鍣ㄤ笂涓嬫枃 + private string WarehouseCTX + { + get + { + string json = "{\"ap1\":{ \"AcctID\":\"" + "61ce591aee4c5a" + "\",\"Username\":\"Administrator\",\"Password\":\"Yc123456@\",\"Lcid\":2052,\"AuthenticateType\":1,\"PasswordIsEncrypted\":\"false\",\"ClientInfo\":{\"ClientType\":8}}"; + var resp = GetResponse("http://121.36.245.199/k3cloud/Kingdee.BOS.ServiceFacade.ServicesStub.User.UserService.ValidateLoginInfo.common.kdsvc", json, new Dictionary<string, string>()); + string ret = (new StreamReader(resp.GetResponseStream(), Encoding.UTF8)).ReadToEnd(); + var result = JObject.Parse(ret)["Context"]; + string token = result["UserToken"].ToString(); + var warehouseCtx = string.Format("LoginUrl={0}&KDServiceSessionId={1}", _cloudUrl, JObject.Parse(ret)["KDSVCSessionId"].ToString());//瀹夊叏鏂版柟寮� + return Convert.ToBase64String(Encoding.UTF8.GetBytes(warehouseCtx)); + } + } + #endregion + + #region 鐗╃悊鏂囦欢id + private string GetFileId(string fileId) + { + return Convert.ToBase64String(Encoding.UTF8.GetBytes(fileId)); + } + #endregion + + #region 鐢靛瓙浠撹闂嚟璇� + private string Token + { + get + { + var token = Guid.NewGuid().ToString(); + return token; + } + } + #endregion + + #region 鍙戦�佽姹� + public Stream SendRequest(string op, string fileId) + { + var header = new Dictionary<string, string>() + { + {"FileID" ,GetFileId(fileId) }, + { "CTX",WarehouseCTX}, + { "token", Token }, + { "PLM_ACCESS_TYPE","pure" } + }; + return PostDataViaHttpWebRequest(RequestUrl(op), string.Empty, header, !op.Equals("Download")); + } + #endregion + + #region 璇锋眰鐨刄RL + private string RequestUrl(string op) + { + return _warehouse + "/" + op; + } + #endregion + + #region 鑾峰彇鍝嶅簲 + private HttpWebResponse GetResponse(string url, string bodyJson, Dictionary<string, string> header) + { + byte[] data = Encoding.UTF8.GetBytes(bodyJson); + + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.Method = WebRequestMethods.Http.Post; + request.ContentType = "application/json"; + request.ContentLength = data.Length; + if (header != null) + { + foreach (var p in header) + { + request.Headers.Add(p.Key, p.Value); + } + } + + using (Stream reqStream = request.GetRequestStream()) + { + reqStream.Write(data, 0, data.Length); + reqStream.Close(); + } + + HttpWebResponse resp = null; + try + { + resp = (HttpWebResponse)request.GetResponse(); + } + catch (WebException ex) + { + var res = ex.Response; + if (res != null) + { + string statusBase64 = ((HttpWebResponse)ex.Response).StatusDescription;//base64缂栫爜鍚庣殑鎶ラ敊淇℃伅 + } + } + return resp; + } + #endregion + + #region 淇濆瓨鏂囦欢鍒版湰鍦� + /*private void PostDataViaHttpWebRequest(string url, string bodyJson, Dictionary<string, string> header, bool isGetContent) + { + + var resp = GetResponse(url, bodyJson, header); + var resultJson = string.Empty; + Stream stream = File.Open("D://DownloadDocDemo.pdf", FileMode.OpenOrCreate); + int packageSize = 1024 * 1024; + byte[] buffer = new byte[packageSize]; + using (stream) + { + using (Stream outputStream = resp.GetResponseStream()) + { + int readLength = 0; + while ((readLength = outputStream.Read(buffer, 0, packageSize)) > 0) + { + stream.Write(buffer, 0, readLength); + stream.Flush(); + } + outputStream.Close(); + } + stream.Close(); + } + }*/ + #endregion + + #region 杩斿洖鏂囦欢娴佺粰鍓嶇 + private Stream PostDataViaHttpWebRequest(string url, string bodyJson, Dictionary<string, string> header, bool isGetContent) + { + + var resp = GetResponse(url, bodyJson, header); + + return resp.GetResponseStream(); // 鐩存帴杩斿洖鍝嶅簲娴� + } + #endregion + } + #endregion +} diff --git a/StandardInterface/MES.Service/service/QcIssueResult/QcIssueResultManager.cs b/StandardInterface/MES.Service/service/QcIssueResult/QcIssueResultManager.cs new file mode 100644 index 0000000..e92cf28 --- /dev/null +++ b/StandardInterface/MES.Service/service/QcIssueResult/QcIssueResultManager.cs @@ -0,0 +1,516 @@ +锘縰sing System; +using System.Collections.Generic; +using AlibabaCloud.OpenApiClient.Models; +using AlibabaCloud.SDK.Dingtalkworkflow_1_0; +using AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models; +using AlibabaCloud.SDK.Dingtalkoauth2_1_0; +using AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models; +using AlibabaCloud.TeaUtil.Models; +using Tea; +using System.Diagnostics; +using MES.Service.Dto.webApi; +using MES.Service.Modes; +using SqlSugar; +using MES.Service.DB; +using MES.Service.Modes.QcIssueResult; +using MES.Service.Dto.webApi.QcIssueResult; +//using MES.Service.Dto.webApi.DeliveryNote; +//using MES.Service.Modes.DeliveryNote; +using Newtonsoft.Json; +using Oracle.ManagedDataAccess.Client; +using System.Data; + +namespace MES.Service.service.QcIssueResult; + +//寮傚父澶勭疆鍗曠粨鏋滆〃 +[SugarTable("MES_QA_ITEMS_DETECT_01")] +public class QcIssueResultManager: Repository<QcIssueResults> +{ + /** + * 浣跨敤 Token 鍒濆鍖栬处鍙稢lient + * @return Client + * @throws Exception + */ + public static AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client CreateClient() + { + AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config(); + config.Protocol = "https"; + config.RegionId = "central"; + return new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client(config); + } + + public static AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client CreateClient1() + { + AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config(); + config.Protocol = "https"; + config.RegionId = "central"; + return new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client(config); + } + + /** + * 鑾峰彇閽夐拤鐨� Access Token + * @return string 杩斿洖鑾峰彇鍒扮殑 Access Token + */ + public string GetToken() + { + AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client client = CreateClient1(); + AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest getAccessTokenRequest = new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest + { + AppKey = "dingyzos0r1bizj7g6lr", + AppSecret = "-HP4RvK2OUbqhG3iBUpd_TPe5MZRj8cfLc0b8Skt8rhC3I38kVLY9SS8P3kLWFcH", + }; + + try + { + var response = client.GetAccessToken(getAccessTokenRequest); + return response.Body.AccessToken; // 杩斿洖鑾峰彇鍒扮殑 Access Token + } + catch (TeaException err) + { + Console.WriteLine($"TeaException: Code={err.Code}, Message={err.Message}"); + return null; + } + catch (Exception _err) + { + Console.WriteLine($"Exception: {_err.Message}"); + return null; + } + } + + /** + * 鏌ョ湅鏈夋棤鑷�夊鎵硅妭鐐� + * @return string 杩斿洖鍚姩缁撴灉 + */ + public string GetForecast() + { + // 鑾峰彇 Access Token + string accessToken = GetToken(); + if (string.IsNullOrEmpty(accessToken)) + { + return "鑾峰彇 Access Token 澶辫触"; + } + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client client = CreateClient(); + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastHeaders processForecastHeaders = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastHeaders(); + processForecastHeaders.XAcsDingtalkAccessToken = accessToken; + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastRequest.ProcessForecastRequestFormComponentValues formComponentValues0 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastRequest.ProcessForecastRequestFormComponentValues + { + Name = "PhoneField", + Value = "123xxxxxxxx", + }; + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastRequest processForecastRequest = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastRequest + { + ProcessCode = "PROC-BBA5632D-DC7C-4267-A3E2-757E2B7023BC", + DeptId = 1, + UserId = "923188102", + FormComponentValues = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.ProcessForecastRequest.ProcessForecastRequestFormComponentValues> + { + formComponentValues0 + }, + }; + try + { + var response = client.ProcessForecastWithOptions(processForecastRequest, processForecastHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions()); + return $"閽夐拤宸ヤ綔娴佸疄渚嬪惎鍔ㄦ垚鍔�: {Newtonsoft.Json.JsonConvert.SerializeObject(response.Body)}"; + } + catch (TeaException err) + { + + return $"TeaException: Code={err.Code}, Message={err.Message}"; + + } + catch (Exception _err) + { + return $"Exception: {_err.Message}"; + } + } + + + /** + * 鍚姩閽夐拤宸ヤ綔娴佸疄渚� + * @return string 杩斿洖鍚姩缁撴灉 + */ + + public string GetProcessNo(GetQcIssueResultDetail getQcIssueResultDetail) + { + + var db = SqlSugarHelper.GetInstance(); + var mapping = db.Queryable<DingNameCode>() + .Where(t => t.DingDingName == getQcIssueResultDetail.Fname) + .Select(t => new DingNameCode + { + DingDingCode=t.DingDingCode, + }) + .ToList(); + if (mapping.Any()) + { + string UserId = mapping.FirstOrDefault().DingDingCode; + + + // 浣跨敤 JSON 搴忓垪鍖栬緭鍑哄璞$殑璇︾粏鍐呭 + string getQcIssueResultDetailJson = JsonConvert.SerializeObject(getQcIssueResultDetail, Formatting.Indented); + Debug.WriteLine("GetQcIssueResultDetail: " + getQcIssueResultDetailJson); + + // 鑾峰彇 Access Token + string accessToken = GetToken(); + if (string.IsNullOrEmpty(accessToken)) + { + return "鑾峰彇 Access Token 澶辫触"; + } + + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Client client = CreateClient(); + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceHeaders startProcessInstanceHeaders = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceHeaders(); + Debug.WriteLine(accessToken); + startProcessInstanceHeaders.XAcsDingtalkAccessToken = accessToken; // 浣跨敤鑾峰彇鍒扮殑 Access Token + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues1 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues + { + Name = "TextField-K2AD4O5B", + Value = getQcIssueResultDetail.ItemName, + }; + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues2 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues + { + Name = "TextField_DYFD1EESLVC0", + Value = getQcIssueResultDetail.ItemModel, + }; + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues3 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues + { + Name = "TextField_1AVN2BNVY1OG0", + Value = getQcIssueResultDetail.FbatchQty, + }; + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues4 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues + { + Name = "TextField_1DKEMESOOGSG0", + Value = getQcIssueResultDetail.SuppName, + }; + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues5 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues + { + Name = "DDDateField_20LKOACGMLXC0", + Value = DateTime.Now.ToString("yyyy-MM-dd"), + }; + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues6 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues + { + Name = "TextField_WBNBWGFHR000", + Value = getQcIssueResultDetail.CgOrder, + }; + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues7 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues + { + Name = "TextareaField_1ZP3BDPMYY800", + Value = getQcIssueResultDetail.remark, + }; + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues8 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues + { + Name = "SignatureField_SKF9Q82DZUO0", + Value = getQcIssueResultDetail.Fname, + }; + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues9 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues + { + Name = "DDSelectField_1AK82Q8A2NB40", + Value = "閫�璐�", + }; + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues10 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues + { + Name = "TextareaField_1LM82CPPR35S0", + Value = "鎸戦�夊唴瀹�", + }; + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues11 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues + { + Name = "TextareaField_AK4JLDDNS2O0", + Value = "璁╂鎺ユ敹鍐呭", + }; + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues12 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues + { + Name = "TextareaField_K69R6770WLS0", + Value = "閫�璐у娉�", + }; + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues13 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues + { + Name = "TextareaField_194UFGLMI02O0", + Value = "鎶ュ簾澶囨敞", + }; + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues14 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues + { + Name = "DDSelectField_1RN2L4RWQ0AO0", + Value = "鍚�", + }; + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues15 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues + { + Name = "InnerContactField_WNG7AU9R2AO0", + Value = "鍔犵", + }; + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues formComponentValues16 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues + { + Name = "DDAttachment_23VB5MMC1R1C0", + Value = "闄勪欢", + }; + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestTargetSelectActioners targetSelectActioners0 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestTargetSelectActioners + { + ActionerKey = "null", + ActionerUserIds = new List<string> + { + UserId + }, + }; + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestApprovers approvers0 = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestApprovers + { + ActionType = "OR", + UserIds = new List<string> + { + UserId + }, + }; + + + AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest startProcessInstanceRequest = new AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest + { + OriginatorUserId = UserId, + ProcessCode = "PROC-BBA5632D-DC7C-4267-A3E2-757E2B7023BC", + DeptId = 1, + FormComponentValues = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestFormComponentValues> + { + formComponentValues1,formComponentValues2,formComponentValues3, formComponentValues4, formComponentValues5, formComponentValues6, formComponentValues7, formComponentValues8, + formComponentValues9,formComponentValues10, formComponentValues11, formComponentValues12, formComponentValues13, formComponentValues14 + }, + TargetSelectActioners = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestTargetSelectActioners> + { + targetSelectActioners0 + }, + Approvers = new List<AlibabaCloud.SDK.Dingtalkworkflow_1_0.Models.StartProcessInstanceRequest.StartProcessInstanceRequestApprovers> + { + approvers0 + }, + CcList = new List<string> + { + UserId + }, + CcPosition = "START", + + }; + // 搴忓垪鍖� FormComponentValues 鍒楄〃涓� JSON 鏍煎紡 + string formComponentValuesJson = JsonConvert.SerializeObject(startProcessInstanceRequest.FormComponentValues, Formatting.Indented); + Debug.WriteLine("FormComponentValues: " + formComponentValuesJson); + try + { + string requestContent = Newtonsoft.Json.JsonConvert.SerializeObject(startProcessInstanceRequest); + Debug.WriteLine("startProcessInstanceRequest鍐呭锛�"); + Debug.WriteLine(requestContent); + var response = client.StartProcessInstanceWithOptions(startProcessInstanceRequest, startProcessInstanceHeaders, new RuntimeOptions()); + return $"閽夐拤宸ヤ綔娴佸疄渚嬪惎鍔ㄦ垚鍔�: {Newtonsoft.Json.JsonConvert.SerializeObject(response.Body)}"; + } + catch (TeaException err) + { + string requestContent = Newtonsoft.Json.JsonConvert.SerializeObject(startProcessInstanceRequest); + Debug.WriteLine("startProcessInstanceRequest鍐呭锛�"); + Debug.WriteLine(startProcessInstanceRequest); + return $"TeaException: Code={err.Code}, Message={err.Message}"; + } + catch (Exception _err) + { + return $"Exception: {_err.Message}"; + } + } + else { + return "鎮ㄤ笉鏄叕鍙告垚鍛樻垨杩樻湭琚姞鍏ュ埌鏁版嵁搴撲腑鎴栧悕瀛楀~鍐欓敊璇紝鎬讳箣鏈壘鍒板尮閰嶇殑鐢ㄦ埛淇℃伅"; + } + } + + + /** + * 灏嗗甫鏈夋祦绋嬪彿鍜屾楠屽崟鍙风殑鏂拌褰曟彃鍏ヨ〃涓� + */ + public dynamic SaveProcessNo(string ReleaseNo,string ProcessNo) + { + + var QcIssueResults = GetQcIssueResults(ReleaseNo, ProcessNo); + + return UseTransaction(db => + { + return SaveOrUpdateData(db, QcIssueResults) ? 1 : 0; + }) > 0; + } + + public QcIssueResults GetQcIssueResults(string ReleaseNo, string ProcessNo) + { + var QcIssueResults = new QcIssueResults + { + ProcessNo = ProcessNo, + ReleaseNo = ReleaseNo, + QcStatu = "" + }; + + return QcIssueResults; + } + + /** + * 鏍规嵁娴佺▼鍙锋洿鏂拌〃鐨勮褰� + */ + public dynamic Save(ErpQcIssueResult erpQcIssueResult) + { + var json = JsonConvert.SerializeObject(erpQcIssueResult); + + //var saveSuccess = UseTransaction(db => + //{ + // var data = GetMesQcIssueResults(erpQcIssueResult); + // return SaveOrUpdateData(db, data); + //}); + + return new + { + SerializedPayload = json, + ServerTime = DateTime.UtcNow.ToString("O") + }; + } + + public QcIssueResults GetMesQcIssueResults(ErpQcIssueResult erpQcIssueResult) + { + var mesQcIssueResults = new QcIssueResults + { + ProcessNo = erpQcIssueResult.ProcessNo, + FReview = erpQcIssueResult.FReview, + QcStatu = erpQcIssueResult.QcStatus + }; + + return mesQcIssueResults; + } + + /** + * 鎻掑叆鍜屾洿鏂版暟鎹簱琛� + */ + private bool SaveOrUpdateData(SqlSugarScope db, QcIssueResults qcIssueResults) + { + + // 鏌ヨ QcIssueResults 琛ㄤ腑鏄惁瀛樺湪鍖归厤鐨勮褰� + var mapping = db.Queryable<QcIssueResults>() + .Where(t => t.ProcessNo == qcIssueResults.ProcessNo) + .Select(t => new QcIssueResults + { + ReleaseNo = t.ReleaseNo, + }) + .ToList(); + + if (mapping.Any()) + { + if (qcIssueResults.QcStatu=="鎷掔粷") + { + string ReleaseNo = mapping.FirstOrDefault().ReleaseNo; + + // 鍙洿鏂� ReleaseNo 鍜� FReview 涓や釜瀛楁 + var updateResult = db.Updateable<QcIssueResults>() + .SetColumns(t => new QcIssueResults + { + ReleaseNo = ReleaseNo, + FReview = qcIssueResults.FReview + }) + .Where(t => t.ProcessNo == qcIssueResults.ProcessNo) // 鏄惧紡鎸囧畾鏇存柊鏉′欢 + .ExecuteCommand(); + + // 鏌ヨ UpdateMesQaItems 琛ㄤ腑鏄惁瀛樺湪鍖归厤鐨勮褰� + var existingRecord = db.Queryable<UpdateMesQaItems>() + .Where(it => it.ReleaseNo == ReleaseNo) + .First(); // 浣跨敤 First 鑾峰彇绗竴鏉¤褰� + + Debug.WriteLine($"鏌ヨ鍒扮殑 mapping: {JsonConvert.SerializeObject(existingRecord)}"); + + if (existingRecord != null) + { + string result = null; + bool returnValue = false; + try + { + string connectionString = "User Id=yc_dev;Password=ycdev;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.100)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)))"; + using (OracleConnection connection = new OracleConnection(connectionString)) + { + using (OracleCommand command = new OracleCommand("PRC_MES_IQC_CG_REVOCK", connection)) + { + command.CommandType = CommandType.StoredProcedure; + // 娣诲姞杈撳叆鍙傛暟 + command.Parameters.Add("pi_no", OracleDbType.Varchar2).Value = existingRecord.ReleaseNo; // 鏇挎崲涓哄疄闄呭�� + command.Parameters.Add("pi_user", OracleDbType.Varchar2).Value = "PL017"; // 鏇挎崲涓哄疄闄呭�� + // 娣诲姞杈撳嚭鍙傛暟 + OracleParameter poResult = new OracleParameter("po_result", OracleDbType.Int32, ParameterDirection.Output); + OracleParameter poMsg = new OracleParameter("po_msg", OracleDbType.Varchar2, 4000, ParameterDirection.Output); + command.Parameters.Add(poResult); + command.Parameters.Add(poMsg); + // 鎵撳紑杩炴帴骞舵墽琛屽懡浠� + connection.Open(); + command.ExecuteNonQuery(); + // 澶勭悊杩斿洖鍊� + if (poResult.Value != null && poResult.Value.ToString() == "0") + { + returnValue = true; + } + else + { + // 杈撳嚭閿欒淇℃伅 + string errorMsg = poMsg.Value != null ? poMsg.Value.ToString() : "Unknown error occurred"; + Console.WriteLine("Error: " + errorMsg); + } + } + } + return returnValue; + } + catch (Exception ex) + { + Console.WriteLine("Exception: " + ex.Message); + return false; + } + } + else + { + throw new Exception("鏈壘鍒伴渶瑕佹洿鏂扮殑璁板綍"); + } + } + else{ + string ReleaseNo = mapping.FirstOrDefault().ReleaseNo; + + // 鍙洿鏂� ReleaseNo 鍜� FReview 涓や釜瀛楁 + var updateResult = db.Updateable<QcIssueResults>() + .SetColumns(t => new QcIssueResults + { + ReleaseNo = ReleaseNo, + FReview = qcIssueResults.FReview + }) + .Where(t => t.ProcessNo == qcIssueResults.ProcessNo) // 鏄惧紡鎸囧畾鏇存柊鏉′欢 + .ExecuteCommand(); + + // 鏌ヨ UpdateMesQaItems 琛ㄤ腑鏄惁瀛樺湪鍖归厤鐨勮褰� + var existingRecord = db.Queryable<UpdateMesQaItems>() + .Where(it => it.ReleaseNo == ReleaseNo) + .First(); // 浣跨敤 First 鑾峰彇绗竴鏉¤褰� + + Debug.WriteLine($"鏌ヨ鍒扮殑 mapping: {JsonConvert.SerializeObject(existingRecord)}"); + + if (existingRecord != null) + { + // 鏇存柊 UpdateMesQaItems 琛ㄤ腑鐨勫瓧娈� + existingRecord.FngHandle = qcIssueResults.FReview; + if (existingRecord.FngHandle == "閫�璐�") + { + existingRecord.FMRMODE = "閫�鏂欒ˉ鏂�"; + } + else + { + existingRecord.FMRMODE = null; + } + + // 鎵ц鏇存柊鎿嶄綔 + updateResult = db.Updateable(existingRecord).ExecuteCommand(); + + return updateResult > 0; // 濡傛灉鏇存柊鎴愬姛锛岃繑鍥� true + } + else + { + throw new Exception("鏈壘鍒伴渶瑕佹洿鏂扮殑璁板綍"); + } + } + } + else + { + // 濡傛灉 mapping 涓虹┖锛屾彃鍏ユ柊璁板綍鍒� QcIssueResults 琛� + var orUpdate = base.Insert(qcIssueResults); + if (orUpdate) return true; + throw new NotImplementedException("鎻掑叆鎴栨洿鏂板け璐�"); + } + + } + + +} \ No newline at end of file diff --git a/StandardInterface/MESApplication/Controllers/PLM/PLMController.cs b/StandardInterface/MESApplication/Controllers/PLM/PLMController.cs new file mode 100644 index 0000000..a20d80b --- /dev/null +++ b/StandardInterface/MESApplication/Controllers/PLM/PLMController.cs @@ -0,0 +1,125 @@ +锘縰sing ConsoleApp1; +using MES.Service.service.PLM; +using MES.Service.util; +using Microsoft.AspNetCore.Mvc; +using System.Dynamic; +using System.IO; + +namespace MESApplication.Controllers.PLM; + + +[ApiController] +[Route("api/PLM")] +public class PLMController : ControllerBase +{ + private readonly PLMManager m = new(); + private readonly WarehouseDownloadDoc wdd = new(); + + //RetrieveDrawings 璋冨彇鍥剧焊 + [HttpPost("RetrieveDrawings")] + public ResponseResult RetrieveDrawings(string ItemNo) + { + try + { + dynamic resultInfos = new ExpandoObject(); + resultInfos = m.RetrieveDrawings(ItemNo); + + return new ResponseResult + { + status = 0, + message = "OK", + data = resultInfos + }; + } + catch (Exception ex) + { + return ResponseResult.ResponseError(ex); + } + } + + //RetrieveImageFile 璋冨彇涓婁紶鍒版湇鍔″櫒鐨勬媿鎽勬枃浠� + [HttpGet("GetImageNames")] + public IActionResult GetImageNames(string releaseNo) + { + // 鎷兼帴鏈湴鏂囦欢绯荤粺璺緞 + string basePath = @"D:\MES_FTP\IQC\"; // 鏈嶅姟鍣―鐩樹笅鐨勫熀纭�璺緞 + string folderPath = Path.Combine(basePath, releaseNo); // 鍔ㄦ�佹嫾鎺ュ崟鍙峰搴旂殑鏂囦欢澶硅矾寰� + + // 妫�鏌ユ枃浠跺す鏄惁瀛樺湪 + if (!Directory.Exists(folderPath)) + { + return NotFound($"鏂囦欢澶� {folderPath} 涓嶅瓨鍦ㄣ�傝妫�鏌ヨ矾寰勬槸鍚︽纭��"); + } + + // 鑾峰彇鏂囦欢澶逛腑鐨勬墍鏈夊浘鐗囨枃浠跺悕绉� + string[] imageExtensions = { ".jpg", ".jpeg", ".png", ".gif", ".bmp" }; + // 鑾峰彇鏂囦欢鐨勫畬鏁磋矾寰勶紝骞惰繑鍥炰竴涓寘鍚枃浠跺悕鍜屽畬鏁磋矾寰勭殑瀵硅薄 + var imageFiles = Directory.GetFiles(folderPath) + .Where(file => imageExtensions.Any(ext => file.ToLower().EndsWith(ext))) + .Select(file => new + { + FileName = Path.GetFileName(file), // 鏂囦欢鍚� + FilePath = file, + FileBasePath = ConvertFileToBase64(file) // 鏂囦欢鐨� Base64 鏁版嵁 // 鏂囦欢鐨勫畬鏁磋矾寰� + }); + + return Ok(new { success = true, data = imageFiles }); + } + private string ConvertFileToBase64(string filePath) + { + byte[] fileBytes = System.IO.File.ReadAllBytes(filePath); + return Convert.ToBase64String(fileBytes); + } + + [HttpPost("DeleteImageFile")] + public IActionResult DeleteImageFile([FromQuery] string filePath) + { + // 妫�鏌ユ枃浠惰矾寰勬槸鍚︿负绌� + if (string.IsNullOrWhiteSpace(filePath)) + { + return BadRequest("鏂囦欢璺緞涓嶈兘涓虹┖"); + } + + // 纭繚璺緞鏄粷瀵硅矾寰勶紙鍙互鏍规嵁闇�瑕佽皟鏁达級 + filePath = Path.GetFullPath(filePath); + + // 妫�鏌ユ枃浠舵槸鍚﹀瓨鍦� + if (!System.IO.File.Exists(filePath)) + { + return NotFound("鏂囦欢涓嶅瓨鍦�"); + } + + try + { + // 鍒犻櫎鏂囦欢 + System.IO.File.Delete(filePath); + return Ok("鏂囦欢鍒犻櫎鎴愬姛"); + } + catch (System.Exception ex) + { + // 鎹曡幏寮傚父骞惰繑鍥為敊璇俊鎭� + return StatusCode(500, $"鍒犻櫎鏂囦欢鏃跺彂鐢熼敊璇�: {ex.Message}"); + } + } + + //RetrieveDrawings 璋冨彇鍥剧焊 + [HttpPost("OpenDrawings")] + public IActionResult OpenDrawings(string fileId,string fName) + { + try + { + var resultInfos = wdd.SendRequest("Download", fileId); + + return File(resultInfos, "application/octet-stream", fName); + } + catch (Exception ex) + { + return StatusCode(500, new ResponseResult + { + status = 1, + message = ex.Message, + data = null + }); + } + } +} diff --git a/StandardInterface/MESApplication/Controllers/QcIssueResult/QcIssueResultController.cs b/StandardInterface/MESApplication/Controllers/QcIssueResult/QcIssueResultController.cs new file mode 100644 index 0000000..070e9d6 --- /dev/null +++ b/StandardInterface/MESApplication/Controllers/QcIssueResult/QcIssueResultController.cs @@ -0,0 +1,135 @@ +锘縰sing MES.Service.Dto.webApi; +using MES.Service.Dto.webApi.QcIssueResult; +using MES.Service.Modes; +using MES.Service.Modes.QcIssueResult; +//using MES.Service.Modes.SentLaboratory; +using MES.Service.service; +using MES.Service.service.QcIssueResult; +using MES.Service.util; +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.Diagnostics; +using System.Dynamic; +using System.Net; +using System.Text; +using System.Text.Json.Nodes; +using System.Web; + +namespace MESApplication.Controllers.QcIssueResult; + +[ApiController] +[Route("api/[controller]")] +public class QcIssueResultController : ControllerBase +{ + private readonly MessageCenterManager _manager = new(); + private readonly QcIssueResultManager m = new(); + + private readonly string METHOD = "POST"; + + private readonly string TableName = "MES_QCISSUE_RESULT"; + + private readonly string URL = "http://localhost:10054/api/QcIssueResult/"; + + + [HttpPost("GetProcessNo")] + public IActionResult StartDingtalkProcess([FromBody] GetQcIssueResultDetail getQcIssueResultDetail) + { + + try + { + // 鏂板URL瑙g爜澶勭悊閫昏緫 + DecodeUrlEncodedProperties(getQcIssueResultDetail); + + // 璋冪敤 QcIssueResultManager 涓殑 GetProcessNo 鏂规硶鏉ュ惎鍔ㄩ拤閽夊伐浣滄祦瀹炰緥 + string result = m.GetProcessNo(getQcIssueResultDetail); + + string getLaboratoryDetailsJson = JsonConvert.SerializeObject(getQcIssueResultDetail, Formatting.Indented); + Debug.WriteLine("getQcIssueResultDetail: " + getLaboratoryDetailsJson); + + string jsonPart = result.Substring(result.IndexOf("{")); + JObject jsonObject = JObject.Parse(jsonPart); + // 鎻愬彇instanceId鐨勫�� + string instanceId = jsonObject["InstanceId"].ToString(); + + dynamic resultInfos = new ExpandoObject(); + string ProcessNo = instanceId; + var save = m.SaveProcessNo(getQcIssueResultDetail.ReleaseNo, instanceId); + resultInfos.tbBillList = save; + + return Ok(result); + } + catch (Exception ex) + { + // 鎹曡幏寮傚父骞惰繑鍥為敊璇俊鎭� + return StatusCode(500, $"鍚姩閽夐拤宸ヤ綔娴佸疄渚嬪け璐�: {ex.Message}"); + } + } + + // 鏂板瑙g爜鏂规硶 + private void DecodeUrlEncodedProperties(object obj) + { + if (obj == null) return; + + var properties = obj.GetType().GetProperties(); + foreach (var prop in properties) + { + // 鍙鐞嗗瓧绗︿覆绫诲瀷鐨勫睘鎬� + if (prop.PropertyType == typeof(string) && prop.CanWrite) + { + var value = prop.GetValue(obj) as string; + if (!string.IsNullOrEmpty(value)) + { + // 浣跨敤UTF8缂栫爜杩涜瑙g爜 + var decodedValue = HttpUtility.UrlDecode(value, Encoding.UTF8); + prop.SetValue(obj, decodedValue); + } + } + } + } + + [HttpPost("Save")] + public ResponseResult Save(ErpQcIssueResult erpQcIssueResult) + { + var entity = new MessageCenter(); + entity.TableName = TableName; + entity.Url = URL + "Save"; + entity.Method = METHOD; + entity.Data = JsonConvert.SerializeObject(erpQcIssueResult); + entity.Status = 1; + entity.CreateBy = "PL017"; + try + { + dynamic resultInfos = new ExpandoObject(); + var save = m.Save(erpQcIssueResult); + //resultInfos.tbBillList = save; + + //entity.Result = 0; + //if (save) entity.Result = 1; + + //entity.DealWith = 1; + //_manager.save(entity); + + return new ResponseResult + { + status = 0, + message = "OK", + data = save + }; + } + catch (Exception ex) + { + entity.Result = 0; + + entity.DealWith = 0; + + entity.ResultData = ex.Message; + + _manager.save(entity); + + return ResponseResult.ResponseError(ex); + } + } + +} + -- Gitblit v1.9.3