kyy
2025-12-01 f0ac4ec65279aa31d568b933afeb8237bee73a72
1、erp接口新增删除接口 2、返回信息解码更换为data.code的返回编码
已修改4个文件
182 ■■■■ 文件已修改
WebApi/Gs.HostIIS/appsettings.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebApi/Gs.Sys/Services/FmController.cs 106 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebApi/Gs.Toolbox/InterfaceUtil.cs 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebApi/Gs.Toolbox/UtilityHelper.cs 4 ●●●● 补丁 | 查看 | 原始文档 | 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