| WebApi/Gs.HostIIS/appsettings.json | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| WebApi/Gs.Sys/Services/FmController.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| WebApi/Gs.Toolbox/InterfaceUtil.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| WebApi/Gs.Toolbox/UtilityHelper.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
WebApi/Gs.HostIIS/appsettings.json
@@ -6,7 +6,6 @@ } }, "AllowedHosts": "*", /*"ConnectionStrings": "Data Source=192.168.1.146;Initial Catalog=TEST_MES;User ID=testUser;Password =qixi1qaz@WSXtest",*/ "ConnectionStrings": "Data Source=192.168.8.8;Initial Catalog=YS_MES;User ID=sa;Password =JianHui@2025", "TestErpUrl": "http://60.204.140.168:8080//kingdee/billWriteIn", "TestErpUrl2": "http://60.204.140.168:8080//kingdee/transferDirect", @@ -14,6 +13,7 @@ "TestErpUrl4": "http://60.204.140.168:8080//kingdee/billReload", "TestErpUrl5": "http://60.204.140.168:8888//kingdee/billWriteIn", "TestErpUrl6": "http://60.204.140.168:8888//kingdee/transferDirect", "TestErpUrl101": "http://60.204.140.168:8080//kingdee/deleteBill", "ProductionErpUrl": "http://192.168.1.149:8066/WebService1.asmx/mesToErpinfoFormal", "ServicesPath": "Services", "LogPath": "logs", WebApi/Gs.Sys/Services/FmController.cs
@@ -1,4 +1,4 @@ using Gs.Toolbox; using Gs.Toolbox; using Gs.Toolbox.ApiCore.Abstract.Mvc; using Gs.Toolbox.ApiCore.Common.Mvc; using Gs.Toolbox.ApiCore.Group; @@ -257,6 +257,14 @@ string keyGuid = model.keyGuid; string keyNo = model.keyNo; string idtype = model.idtype;//这个仅仅是更新工单状态的时候有 string keyMeth = model.keyMeth; // 特殊处理:delete操作使用TestErpUrl101接口 if (keyMeth != null && keyMeth.Equals("delete", StringComparison.OrdinalIgnoreCase)) { (_rtnInt, _rtnStr) = InterfaceUtil.HttpPostErp(_erpJson, keyUserGuid, keyGuid, keyNo, 101); } else if (string.IsNullOrEmpty(idtype)) { (_rtnInt, _rtnStr) = InterfaceUtil.HttpPostErp(_erpJson, keyUserGuid, keyGuid, keyNo); @@ -286,6 +294,7 @@ { Gs.Toolbox.LogHelper.Debug(this.ToString(), "Fm SendErp:" + ex.Message); return "发送erp失败:" + ex.Message; } if (_rtnInt <= 0) { @@ -309,17 +318,16 @@ string keyMeth = model.keyMeth; string keyNo = model.keyNo; string idtype = model.idtype;//这个仅仅是更新工单状态的时候有 if (keyMeth.ToUpper() == "delete".ToUpper()) return ""; try { System.Data.DataSet dset = new System.Data.DataSet(); SqlParameter[] parameters = { new("@inOrderGuid", keyGuid), new("@inEdtUserGuid", keyUserGuid), new("@keyMeth", keyMeth.ToLower()), }; new("@inOrderGuid", keyGuid), new("@inEdtUserGuid", keyUserGuid), new("@keyMeth", keyMeth.ToLower()), }; dset = DbHelperSQL.RunProcedure(keyProduce, parameters, "0"); if (dset == null) return ""; @@ -327,12 +335,82 @@ return ""; if (dset.Tables[0].Rows.Count <= 0) return ""; //这是普通的接口 // 这是普通的接口 string _mesGuid = dset.Tables[0].Rows[0][0].ToString(); dynamic _datajson = new ExpandoObject(); if (dset.Tables.Count > 1) // delete方法专属处理逻辑 if (keyMeth.Equals("delete", StringComparison.OrdinalIgnoreCase)) { try { _datajson = new ExpandoObject(); List<string> deleteLst = new List<string>(); // 提取billType try { if (dset.Tables.Count > 0 && dset.Tables[0]?.Rows.Count > 0) { string billType = dset.Tables[0].Rows[0][0]?.ToString() ?? ""; ((IDictionary<string, object>)_datajson)["billType"] = billType; } } catch (Exception ex) { Gs.Toolbox.LogHelper.Debug(this.ToString(), $"提取billType异常:{ex.Message}"); } // 提取BILLNO列表 if (dset.Tables.Count > 1 && dset.Tables[1]?.Rows.Count > 0) { DataTable table1 = dset.Tables[1]; string targetColumn = "BILLNO"; bool hasColumn = table1.Columns.Contains(targetColumn); foreach (DataRow row in table1.Rows) { if (row == null) continue; string billNo = ""; try { if (hasColumn) { billNo = row[targetColumn]?.ToString()?.Trim() ?? ""; } else if (table1.Columns.Count > 0) { billNo = row[table1.Columns[0].ColumnName]?.ToString()?.Trim() ?? ""; } } catch { } if (!string.IsNullOrEmpty(billNo)) { deleteLst.Add(billNo); } } } // 挂载到keyChild或默认键 string targetKey = !string.IsNullOrEmpty(keyChild) ? keyChild : "billItems"; ((IDictionary<string, object>)_datajson)[targetKey] = deleteLst; // Gs.Toolbox.LogHelper.Debug(this.ToString(), $"delete分支:提取{deleteLst.Count}条数据"); } catch (Exception ex) { Gs.Toolbox.LogHelper.Debug(this.ToString(), $"delete分支异常:{ex.Message}"); _datajson = new ExpandoObject(); } } // 原有逻辑:非delete方法,执行历史拼接逻辑 else if (dset.Tables.Count > 1) { //这是这是普通的接口里的结案,结构和其它不一样 // 这是普通的接口里的结案,结构和其它不一样 if (keyMeth.ToLower() == "toclose".ToLower() || keyMeth.ToLower() == "closure".ToLower() || keyMeth.ToLower() == "unfinish") { _datajson = dset.Tables[1].Rows[0].RowToDynamic(); @@ -344,8 +422,10 @@ ((IDictionary<string, object>)_datajson)[keyChild] = _lst; } } return JsonConvert.SerializeObject(_datajson); //这是订单回传标识 return JsonConvert.SerializeObject(_datajson); // 这是订单回传标识(原有注释代码完全保留) /*List<dynamic> _datajson22 = new List<dynamic>(); dynamic _ob = new ExpandoObject(); _ob.ENTRY = dset.Tables[0].TableToDynamicList(); @@ -357,6 +437,8 @@ datajson = JsonConvert.SerializeObject(_datajson22), }; return JsonConvert.SerializeObject(_obj22);*/ } catch (Exception ex) { WebApi/Gs.Toolbox/InterfaceUtil.cs
@@ -1,4 +1,4 @@ using Newtonsoft.Json; using Newtonsoft.Json; using System.Data.SqlClient; using System.Dynamic; using System.Net; @@ -47,6 +47,10 @@ { url = AppSettingsHelper.getValueByKey("TestErpUrl6"); } else if (urlType == 101) { url = AppSettingsHelper.getValueByKey("TestErpUrl101"); } HttpWebRequest request = null; StreamWriter requestStream = null; WebResponse response = null; @@ -89,9 +93,36 @@ //{"msg":"操作成功","code":200,"data":{"number":"CGSL168397","code":"200","id":"268781"}} if (_rtn != -1) { Result _result = JsonConvert.DeserializeObject<Result>(responseStr); if ("200".Equals(_result.code)) _rtn = 1; try { Result _result = JsonConvert.DeserializeObject<Result>(responseStr); // 【优先判断】data.code(ERP真正的处理结果) if (_result?.data != null && "200".Equals(_result.data.code)) { _rtn = 1; LogHelper.Debug(url, $"ERP处理成功,data.code=200, number={_result.data.number}, id={_result.data.id}"); } // 【降级判断】如果data为空,则判断外层code(兼容旧接口) /* else if (_result != null && "200".Equals(_result.code)) { _rtn = 1; LogHelper.Debug(url, $"ERP外层返回成功,code=200(无data层,可能是旧接口)"); }*/ else { _rtn = -1; string errorMsg = _result?.data?.code != null ? $"ERP处理失败,data.code={_result.data.code}" : $"ERP处理失败,外层code={_result?.code}"; LogHelper.Debug(url, errorMsg + $", msg={_result?.msg}, responseStr={responseStr}"); } } catch (Exception ex) { _rtn = -1; LogHelper.Debug(url, $"ERP返回数据解析失败:{ex.Message}, responseStr={responseStr}"); } } sbLog.Append("," + DateTime.Now.ToString() + "结束发送"); if (_rtn > 0) @@ -126,11 +157,34 @@ public class Result { /// <summary> /// 200成功,否则失败 /// 200成功,否则失败(外层code) /// </summary> /// public string? msg { get; set; } public string? code { get; set; } // public string? data { get; set; } /// <summary> /// data层,包含真正的ERP处理结果 /// </summary> public ErpData? data { get; set; } } /// <summary> /// ERP返回的data层数据结构 /// </summary> public class ErpData { /// <summary> /// ERP单据编号 /// </summary> public string? number { get; set; } /// <summary> /// ERP处理结果代码("200"成功) /// </summary> public string? code { get; set; } /// <summary> /// ERP单据ID /// </summary> public string? id { get; set; } } WebApi/Gs.Toolbox/UtilityHelper.cs
@@ -1,4 +1,4 @@ using System.Data; using System.Data; using System.Dynamic; using System.Security.Cryptography; using System.Text; @@ -120,7 +120,7 @@ sb.Append(" exec prc_log_create '" + _userGuid + "','" + _abtGuid + "','" + _table + "','" + _logTxt + "' "); return sb; } } /// <summary> /// 判断是不是guid