From f3047bc98b1ace53f1ee09beca82c3864bb5957e Mon Sep 17 00:00:00 2001 From: zjh <2207896513@qq.com> Date: 星期四, 05 六月 2025 21:10:48 +0800 Subject: [PATCH] 签收送货单api提交 --- StandardPda/MES.Service/service/QC/LljService.cs | 420 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 416 insertions(+), 4 deletions(-) diff --git a/StandardPda/MES.Service/service/QC/LljService.cs b/StandardPda/MES.Service/service/QC/LljService.cs index ee00c40..e5e979e 100644 --- a/StandardPda/MES.Service/service/QC/LljService.cs +++ b/StandardPda/MES.Service/service/QC/LljService.cs @@ -5,12 +5,19 @@ using MES.Service.util; using MySqlConnector; using Newtonsoft.Json; +using RestSharp; using SharpCompress.Factories; using SqlSugar; +using System.ComponentModel; using System.Data; using System.Xml.Linq; +using ZstdSharp.Unsafe; +using System.Net.Http; using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; using DbType = System.Data.DbType; +using System.Text; +using System.Security.Cryptography; +using AngleSharp.Io; namespace MES.Service.service.QC; @@ -68,8 +75,10 @@ .WhereIF(queryObj.SelectedIndex == "1" && queryObj.SearchValue != null && queryObj.SearchValue != "", (a, b, d) => (a.ItemNo.ToLower().Contains(queryObj.SearchValue.ToLower()))) .WhereIF(queryObj.SelectedIndex == "2" && queryObj.SearchValue != null && queryObj.SearchValue != "", (a, b, d) => (a.ItemName.ToLower().Contains(queryObj.SearchValue.ToLower()))) .WhereIF(queryObj.SelectedIndex == "3" && queryObj.SearchValue != null && queryObj.SearchValue != "", (a, b, d) => (a.SuppName.ToLower().Contains(queryObj.SearchValue.ToLower()))) - .WhereIF(queryObj.SelectedIndex == "4" && queryObj.SearchValue != null && queryObj.SearchValue != "", (a, b, d, e) => (e.Fname.ToLower().Contains(queryObj.SearchValue.ToLower()))) - .OrderByDescending((a, b, d) => a.Id) + .WhereIF(queryObj.result== "宸插畬鎴�", (a, b, d, e) => (a.IqcDate>= queryObj.startDate.ToDateTime()&& a.IqcDate <= queryObj.endDate.ToDateTime().AddDays(1))) + .WhereIF(queryObj.result == "宸插畬鎴�" && queryObj.state!= "鎵�鏈夌姸鎬�",(a, b, d, e) => (a.FcheckResu == queryObj.state)) + // .WhereIF(queryObj.result == "鏈畬鎴�" && queryObj.SearchValue != null && queryObj.SearchValue != "", (a, b, d, e) => (e.Fname.ToLower().Contains(queryObj.SearchValue.ToLower()))) + //.OrderByDescending((a, b, d) => a.Id) .Select((a, b, d, e, f, g,h,i) => new LtsLlj { //UserName = g.Fname, @@ -359,6 +368,247 @@ return msg; } + + + public class DataAcquisitionConfiguration + { + //娴嬭瘯鐜 + public const string TEST_COMPANY_CODE = "55958795"; + public const string TEST_APP_KEY = "ab2d86b6dffabcc81dca6855c727c246"; + public const string TEST_APP_SECRET = "01b17babe2a96d5ebd802e67709f33d1"; + public const string TEST_ERP_CODE = "Z106"; + + //姝e紡鐜 + public const string COMPANY_CODE = "72505985"; + public const string APP_KEY = "a2866f03bb7f76387bfb1a98001f0e31"; + public const string APP_SECRET = "f13bd1bcb130f0090ed92dc021e5f4e1"; + public const string ERP_CODE = "Z106"; + } + [Serializable] + public class ApiCommonParam + { + //鍙戞斁缁欑敤鎴风殑Key + public string appKey { get; set; } + //鎺ュ彛鐗堟湰 + public string version { get; set; } + //鏁版嵁鎵�灞炲叕鍙哥紪鐮� + public string ownerCompanyCode { get; set; } + //鎿嶄綔鑰呮墍灞炲叕鍙哥紪鐮� + public string operateCompanyCode { get; set; } + //绛惧悕 + public string sign { get; set; } + //鏃堕棿鎴� + public long? timestamps { get; set; } + ////鎵╁睍瀛楁 + //public object Reserver { get; set; } + } + [Serializable] + public class BodyParam + { + public string erpCode { get; set; } + public string dnXkNo { get; set; } + } + public static string BuildCurrentSign(string paramJson, string appSecret) + { + var commonDict = new Dictionary<string, string>(); + var jsonDict = JsonConvert.DeserializeObject<Dictionary<string, object>>(paramJson); + + var keyList = new List<string>(); + foreach (var entry in jsonDict) + { + if (entry.Key.Equals("sign", StringComparison.OrdinalIgnoreCase)) + continue; + + var value = entry.Value?.ToString().Trim() ?? ""; + commonDict[entry.Key] = value; + keyList.Add(entry.Key); + } + + // 鎸夊瓧姣嶉『搴忔帓搴忛敭 + keyList.Sort((x, y) => string.Compare(x, y, StringComparison.Ordinal)); + + // 鎷兼帴绛惧悕瀛楃涓� + var sb = new StringBuilder(); + foreach (var key in keyList) + { + sb.Append(commonDict[key]).Append(":"); + } + sb.Append(appSecret); + + // 璁$畻MD5 + using var md5 = MD5.Create(); + byte[] hashBytes = md5.ComputeHash(Encoding.UTF8.GetBytes(sb.ToString())); + + return BitConverter.ToString(hashBytes) + .Replace("-", "") + .ToLowerInvariant(); + } + public class XkyCommonParam + { + public ApiCommonParam commonParam { get; set; } + public BodyParam body { get; set; } + + public static XkyCommonParam GetInit() + { + var apiParam = new ApiCommonParam + { + // 鍙戞惡瀹簯鎻愪緵鐨刟ppKey + appKey = DataAcquisitionConfiguration.APP_KEY, + // 鎺ュ彛鐗堟湰 + version = "1.0", + // 鎿嶄綔鑰呮墍灞炲叕鍙哥紪鐮� + operateCompanyCode = DataAcquisitionConfiguration.COMPANY_CODE, + // 鏁版嵁鎵�灞炲叕鍙哥紪鐮侊紝闈為泦鍥㈠叕鍙搁粯璁よ祴鍊间负鎿嶄綔鍏徃 + ownerCompanyCode = DataAcquisitionConfiguration.COMPANY_CODE, + // 褰撳墠鏃堕棿瀵瑰簲鐨勬椂闂存埑锛堢鏁帮級 + timestamps = DateTimeOffset.UtcNow.ToUnixTimeSeconds() + }; + + + string appSecret = DataAcquisitionConfiguration.APP_SECRET; + + // 鐢熸垚绛惧悕 + string sign = BuildCurrentSign( + JsonConvert.SerializeObject(apiParam), + appSecret); + apiParam.sign = sign; + + return new XkyCommonParam + { + commonParam = apiParam + }; + } + } + + public async Task<string[]> SignDelivery(string id) + { + string[] msg = new string[2]; + //鍙戣捣璇锋眰锛岀鏀堕�佽揣鍗� + + try + { + var requestData = XkyCommonParam.GetInit(); + requestData.body = new BodyParam + { + erpCode = "Z106", + dnXkNo = id + }; + + // 搴忓垪鍖栦负JSON + string json = JsonConvert.SerializeObject(requestData); + + using (var client = new HttpClient()) + { + // 璁剧疆璇锋眰鍐呭 + var content = new StringContent(json, Encoding.UTF8, "application/json"); + // 鍙戦�丳OST璇锋眰 + HttpResponseMessage response = await client.PostAsync( + "https://openapi.xiekeyun.com/delivery/updateDeliveryStatus.json", + content); + // 澶勭悊鍝嶅簲 + if (response.IsSuccessStatusCode) + { + string responseBody = await response.Content.ReadAsStringAsync(); + var result = + JsonConvert.DeserializeObject<XKYApiResponse>(responseBody); + //鎴愬姛鍚庢墜鍔ㄤ笅鎺ㄥ埌璐у崟 + if (result.Result == 1) { + + // 瀹氫箟杈撳嚭鍙傛暟 + + var outputMessage = new SugarParameter("C_RESULT", null, + DbType.String, + ParameterDirection.Output, 4000); + + // 瀹氫箟杈撳叆鍙傛暟 + var parameters = new List<SugarParameter> + { + new("C_IN_STR", "閫佽揣鍗曠鏀禰BTNOK[PL017["+id, + DbType.String, ParameterDirection.Input), + outputMessage + }; + + var db = SqlSugarHelper.GetInstance(); + + // 浣跨敤 SqlSugar 鎵ц瀛樺偍杩囩▼ + db.Ado.ExecuteCommand( + "BEGIN PRC_RF_PDA_RECEIPT_BTN(:C_IN_STR,:C_RESULT); END;", + parameters.ToArray()); + + + // 鑾峰彇杈撳嚭鍙傛暟鐨勫�� + + var messageValue = outputMessage.Value?.ToString(); + + msg[0] = "0"; + msg[1] = messageValue; + } + else + { + if (result.ErrorMsg== "鍑鸿揣鍗曟嵁涓嶆槸宸查�佽揣鐘舵�侊紒") + { + // 瀹氫箟杈撳嚭鍙傛暟 + + var outputMessage = new SugarParameter("C_RESULT", null, + DbType.String, + ParameterDirection.Output, 4000); + + // 瀹氫箟杈撳叆鍙傛暟 + var parameters = new List<SugarParameter> + { + new("C_IN_STR", "閫佽揣鍗曠鏀禰BTNOK[PL017["+id, + DbType.String, ParameterDirection.Input), + outputMessage + }; + + var db = SqlSugarHelper.GetInstance(); + + // 浣跨敤 SqlSugar 鎵ц瀛樺偍杩囩▼ + db.Ado.ExecuteCommand( + "BEGIN PRC_RF_PDA_RECEIPT_BTN(:C_IN_STR,:C_RESULT); END;", + parameters.ToArray()); + + + // 鑾峰彇杈撳嚭鍙傛暟鐨勫�� + + var messageValue = outputMessage.Value?.ToString(); + + msg[0] = "0"; + msg[1] = messageValue; + } + else + { + msg[0] = "1"; + msg[1] = "002[" + id + "绛炬敹澶辫触锛�" + result.ErrorMsg; + } + + } + + } + else + { + + msg[0] = "1"; + msg[1] = $"002[{id}绛炬敹澶辫触锛岃姹傚け璐ワ紝鐘舵�佺爜锛歿response.StatusCode}"; + } + } + } + catch (Exception ex) + { + + msg[0] = "1"; + msg[1] = $"002[璇锋眰澶辫触锛岀姸鎬佺爜锛歿ex.Message}"; + } + + + //msg[0] = "1"; + //msg[1] = responseBody; + return msg; + + } + + + private string ExtractSubstring(string input, char startChar, char endChar) { var startIndex = input.IndexOf(startChar); @@ -434,6 +684,7 @@ new JoinQueryInfos(JoinType.Left, a.Id == b.MainId)) .Where((a, b) => a.ReleaseNo == releaseNo) // .WhereIF(id > 0, (a, b) => a.Id == id) + .OrderByDescending((a, b) => a.FcheckItem) .GroupBy((a, b) => new { a.Id, @@ -687,6 +938,144 @@ return rkjDto; } + + public DataTable getFromInfo(string BarCode) + { + OracleSQLHelper SQLHelper = new(); + var sql = string.Format(@"select b.ID,b.LOT_NO,b.RELEASE_NO,b.FSUBMIT from MES_INV_ITEM_BARCODES A + left join MES_QA_ITEMS_DETECT_01 B on A.BILL_NO=b.LOT_NO and A.ITEM_ID=b.ITEM_ID + where ITEM_BARCODE='"+ BarCode + "'"); + return SQLHelper.ExecuteQuery(sql); + } + public DataTable getImgBDlist(string id) + { + OracleSQLHelper SQLHelper = new(); + var sql = string.Format(@"select id,FID,IMAGE_DATA from MES_QS_IMAGE where FID="+id+""); + return SQLHelper.ExecuteQuery(sql); + } + /// <summary> + /// 涓�鑷存�ч」鐩� + /// </summary> + public class Component + { + public string Name { get; set; } + public List<string> Specs { get; set; } + public List<string> Manufacturers { get; set; } + public List<string> Id { get; set; } + public int SelectedSpec { get; set; } + public int SelectedMfg { get; set; } + } + public List<Component> getYzxBDlist(string id) + { + OracleSQLHelper SQLHelper = new(); + //鏌ュ厓鍣ㄤ欢 + var sql1 = string.Format(@"select ITEMNAME from MES_IQC_CONSISTENCY_ck where PID='"+id+"' group by ITEMNAME order by ITEMNAME"); + //鏌ユ槑缁� + var sql2 = string.Format(@"select * from MES_IQC_CONSISTENCY_ck where PID='"+id+"' order by ITEMNAME,ITEMMODE,SUPPNAME"); + DataTable dataTable1= SQLHelper.ExecuteQuery(sql1); + DataTable dataTable2 = SQLHelper.ExecuteQuery(sql2); + List<Component> Components = new List<Component>(); + + + + for (int i = 0; i <dataTable1.Rows.Count; i++) + { + Component component = new Component(); + component.Name= dataTable1.Rows[i]["ITEMNAME"].ToString(); + component.Specs= new List<string>(); + component.Manufacturers = new List<string>(); + component.Id = new List<string>(); + component.SelectedSpec = -1; + component.SelectedMfg = -1; + int index = 0; + for (int j = 0; j < dataTable2.Rows.Count; j++) + { + + if (dataTable2.Rows[j]["ITEMNAME"].ToString()== dataTable1.Rows[i]["ITEMNAME"].ToString()) + { + component.Specs.Add(dataTable2.Rows[j]["ITEMMODE"].ToString()); + component.Manufacturers.Add(dataTable2.Rows[j]["SUPPNAME"].ToString()); + component.Id.Add(dataTable2.Rows[j]["ID"].ToString()); + if (dataTable2.Rows[j]["ISCHACK"].ToString()=="1") + { + component.SelectedSpec = index; + component.SelectedMfg = index; + } + index++; + } + } + + Components.Add(component); + } + return Components; + } + + public DataTable getBlmsItem() + { + OracleSQLHelper SQLHelper = new(); + //鏌ヤ笉鑹弿杩� + var sql1 = string.Format(@"select DEFECT_NAME + from MES_DEFECT_CODE A + left join MES_DEFECT_TYPE X ON X.TYPE_NO = A.DEFECT_SORT AND X.COMPANY = A.COMPANY AND X.FACTORY = A.FACTORY"); + + return SQLHelper.ExecuteQuery(sql1); + } + public DataTable getBlmsItem(string id) + { + OracleSQLHelper SQLHelper = new(); + //鏌ヤ笉鑹弿杩� + var sql1 = string.Format(@"select FCHECK_ITEM,FUNIT from mes_qa_items_detect_detail5 f where RELEASE_NO='"+id+"' and FUNIT is not null order by FCHECK_ITEM"); + + return SQLHelper.ExecuteQuery(sql1); + } + public void saveYzxBDlist(string id,DataTable DB) + { + OracleSQLHelper SQLHelper = new(); + //鍏堟妸缁撴灉娓呯┖ + var sql1 = string.Format(@"update MES_IQC_CONSISTENCY_ck set ISCHACK=0 where PID='"+ id + "' "); + SQLHelper.ExecuteQuery(sql1); + string rowId = ""; + for (int i = 0; i < DB.Rows.Count; i++) + { + rowId += "'" + DB.Rows[i]["id"] + "',"; + } + rowId = rowId.Substring(0, rowId.Length - 1); + + + //淇敼缁撴灉 + var sql2 = string.Format(@"update MES_IQC_CONSISTENCY_ck set ISCHACK=1 where PID='" + id + "'and id in("+ rowId + ") "); + SQLHelper.ExecuteQuery(sql2); + + } + + public string[] YzxImgVerify(string id) + { + string[] msgStr = new string[2]; + + OracleSQLHelper SQLHelper = new(); + //淇敼缁撴灉 + var sql2 = string.Format(@"select A.ITEMNAME from ( select 888||min(id) id,ITEMNAME from MES_IQC_CONSISTENCY_CK where pid='"+ id + "' group by ITEMNAME) A " + + "left join MES_QS_IMAGE b on a.id=b.fid where B.id is null order by ITEMNAME"); + DataTable db= SQLHelper.ExecuteQuery(sql2); + if (db.Rows.Count > 0) + { + msgStr[1] = "鍏冨櫒浠讹細"; + for (int i = 0; i < db.Rows.Count; i++) + { + msgStr[1] += db.Rows[i]["ITEMNAME"]+ ","; + } + msgStr[1] += "鏈畬鎴愬浘鐗囦笂浼狅紝璇蜂笂浼狅紒"; + msgStr[0] = "1"; + } + else + { + msgStr[0] = "0"; + msgStr[1] = "ok"; + } + + return msgStr; + } + public int UpdateQSItemDetail(MesQaItemsDetectDetail12 detail) { var withOracle = SqlSugarHelper.UseTransactionWithOracle(db => @@ -753,8 +1142,8 @@ return SqlSugarHelper.UseTransactionWithOracle(db => { return db.Updateable<MesQaItemsDetectDetail5>() - // .SetColumns(it => - // it.Remarks == dto.Remarks) //SetColumns鏄彲浠ュ彔鍔犵殑 鍐�2涓氨2涓瓧娈佃祴鍊� + .SetColumns(it => + it.Funit == dto.Remarks) //SetColumns鏄彲浠ュ彔鍔犵殑 鍐�2涓氨2涓瓧娈佃祴鍊� .Where(it => it.Id == dto.pid) .ExecuteCommand(); }); @@ -877,4 +1266,27 @@ [JsonProperty("totalCount")] public int TotalCount { get; set; } } + /// <summary> + /// 鎼哄浜戞帴鍙h繑鍥炲璞� + /// </summary> + public class XKYApiResponse + { + [JsonProperty("errorCode")] + public string ErrorCode { get; set; } + + [JsonProperty("errorMsg")] + public string ErrorMsg { get; set; } + + [JsonProperty("result")] + public int Result { get; set; } + + [JsonProperty("data")] + public object Data { get; set; } + + [JsonProperty("curServerTime")] + public long CurServerTime { get; set; } + + // 濡傛灉闇�瑕佹椂闂磋浆鎹㈠彲浠ユ坊鍔犺繖涓睘鎬� + public DateTime ServerTime => DateTimeOffset.FromUnixTimeMilliseconds(CurServerTime).DateTime; + } } \ No newline at end of file -- Gitblit v1.9.3