|
using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using wcftest.BussinessExtension.Handle;
|
using wcftest.orm;
|
using wcftest.sendToSap;
|
|
namespace wcftest.BussinessExtension
|
{
|
/// <summary>
|
/// SAP交互服务
|
/// </summary>
|
public class SAPHelper
|
{
|
private static sendToSap.SapWcfServiceClient sendSap = new sendToSap.SapWcfServiceClient();
|
|
#region 推送
|
|
/// <summary> 移库确认 【已完结】
|
/// 移库确认 【已完结】
|
/// </summary>
|
/// <param name="moveList">移库明细</param>
|
/// <returns></returns>
|
public static string moveStockConfirm(SapSendInfo sapSendInfo, string moveList)
|
{
|
string msg = "";
|
string result = "";
|
|
// return form.textBox7.Text.Trim();
|
var logTitle = GetSapLog("moveStockConfirm", "移库确认", moveList);
|
try
|
{
|
Log4NetHelper.WriteInfoLog(LogType.SAPService, "开始推送" + logTitle);
|
MovMaterialEntity[] results = JsonConvert.DeserializeObject<MovMaterialEntity[]>(moveList);
|
//ConfirmMOV
|
result = sendSap.ConfirmMOV(results, out msg);
|
|
if (msg == "")
|
{
|
//成功记录到数据库
|
if (sapSendInfo == null)
|
{//只有不存在的时候,才会写进去,已经存在的,只需要更改状态即可
|
SapSendInfoHandler.SaveAddSapSendInfoForMove(true, results.ToList(), result, msg);
|
}
|
|
Log4NetHelper.WriteInfoLog(LogType.SAPService, "推送成功" + logTitle);
|
var data = new
|
{
|
result = true,
|
msg = result
|
};
|
msg = JsonConvert.SerializeObject(data);
|
return msg;
|
}
|
else
|
{
|
SapSendFailRecodInfoHandler.AddForMove(results, result, msg);//增加 [EditBy shaocx,2022-02-22]
|
Log4NetHelper.WriteInfoLog(LogType.SAPService, "推送失败" + logTitle + ",返回结果:" + msg);
|
Log4NetHelper.WriteErrorLog(LogType.SAPService, "推送失败" + logTitle + ",返回结果:" + msg);
|
var data = new
|
{
|
result = false,
|
msg = "失败"
|
};
|
msg = JsonConvert.SerializeObject(data);
|
return msg;
|
}
|
|
}
|
catch (Exception ex)
|
{
|
//失败后,不再推送,看日志即可 【Editby shaocx,2025-09-18】
|
//MovMaterialEntity[] results2 = JsonConvert.DeserializeObject<MovMaterialEntity[]>(moveList);
|
//SapSendFailRecodInfoHandler.AddForMove(results2, result, msg);//增加 [EditBy shaocx,2022-02-22]
|
|
Log4NetHelper.WriteInfoLog(LogType.SAPService, "推送异常:" + logTitle + ",返回结果:" + msg + ",异常:" + ex.Message);
|
Log4NetHelper.WriteErrorLog(LogType.SAPService, "推送异常:" + logTitle + ",返回结果:" + msg + ",异常:" + ex.Message, ex);
|
var data = new
|
{
|
result = false,
|
msg = "异常"
|
};
|
msg = JsonConvert.SerializeObject(data);
|
//logtxt.txtWrite("类名: " + "apitest" + "方法名:" + "moveStockConfirm" + "产生异常" + logtxt.oneRow(ex.ToString()), 2);
|
|
}
|
return msg;
|
|
}
|
|
/// <summary>出库确认,将出库信息反馈给SAP 【注意:只有按单出库的时候推送给SAP】
|
/// 出库确认,将出库信息反馈给SAP
|
/// </summary>
|
/// <param name="outList">出库物料明细</param>
|
/// <returns></returns>
|
public static string StockOutConfirm(SapSendInfo sapSendInfo, string outList)
|
{
|
string msg = "";
|
GIMaterialEntity[] results = JsonConvert.DeserializeObject<GIMaterialEntity[]>(outList);
|
var logTitle = GetSapLog("StockOutConfirm", "出库确认,将出库信息反馈给SAP", outList);
|
try
|
{
|
//记录日志
|
Log4NetHelper.WriteInfoLog(LogType.SAPService, "开始推送" + logTitle);
|
|
string result = sendSap.ConfirmGI(results, out msg);
|
if (msg == "")
|
{
|
//成功记录到数据库
|
if (sapSendInfo == null)
|
{//只有不存在的时候,才会写进去,已经存在的,只需要更改状态即可
|
SapSendInfoHandler.SaveAddSapSendInfoForOutStore(true, outList, results.ToList(), result, msg);
|
}
|
|
Log4NetHelper.WriteInfoLog(LogType.SAPService, "推送成功" + logTitle);
|
var data = new
|
{
|
result = true,
|
msg = result
|
};
|
msg = JsonConvert.SerializeObject(data);
|
return msg;
|
}
|
else
|
{
|
Log4NetHelper.WriteInfoLog(LogType.SAPService, "推送失败" + logTitle + ",返回结果:" + msg);
|
Log4NetHelper.WriteErrorLog(LogType.SAPService, "推送失败" + logTitle + ",返回结果:" + msg);
|
SapSendFailRecodInfoHandler.AddForOutStore(results, result, msg);//记录失败表
|
var data = new
|
{
|
result = false,
|
msg = "失败"
|
};
|
msg = JsonConvert.SerializeObject(data);
|
return msg;
|
}
|
|
}
|
catch (Exception ex)
|
{
|
Log4NetHelper.WriteInfoLog(LogType.SAPService, "推送异常:" + logTitle + ",返回结果:" + msg + ",异常:" + ex.Message);
|
Log4NetHelper.WriteErrorLog(LogType.SAPService, "推送异常:" + logTitle + ",返回结果:" + msg + ",异常:" + ex.Message, ex);
|
|
//失败后,不再推送,看日志即可 【Editby shaocx,2025-09-18】
|
//SapSendFailRecodInfoHandler.AddForOutStore(results, "WMS抛出异常", "WMS抛出异常:" + ex.Message);//记录失败表
|
|
var data = new
|
{
|
result = false,
|
msg = "异常"
|
};
|
msg = JsonConvert.SerializeObject(data);
|
//logtxt.txtWrite("出库确认异常 类名: " + "apitest" + "方法名:StockOutConfirm" + "出库明细:" + outList + ex.StackTrace.ToString(), 2);
|
}
|
return msg;
|
}
|
|
/// <summary>按凭证退货 【已完结】
|
/// 按凭证退货 【已完结】
|
/// </summary>
|
/// <param name="res"></param>
|
/// <returns></returns>
|
public static string reverser(string res)
|
{
|
string msg = "";
|
if (res.Trim() == "")
|
{
|
return "参数为空";
|
}
|
string result = "";
|
var logTitle = GetSapLog("reverser", "按凭证退货", res);
|
try
|
{
|
Log4NetHelper.WriteInfoLog(LogType.SAPService, "开始推送" + logTitle);
|
result = sendSap.WmsReverser(res, out msg);
|
if (msg == "")
|
{
|
//记录到表中
|
SapSendInfoHandler.AddSapSendInfoForWmsReverser(res, result, msg);
|
Log4NetHelper.WriteInfoLog(LogType.SAPService, "推送成功" + logTitle);
|
return msg;
|
}
|
else
|
{
|
//这里是 收货,退货失败? [EditBy shaocx,2022-03-06]
|
Log4NetHelper.WriteInfoLog(LogType.SAPService, "推送失败" + logTitle + ",返回结果:" + msg);
|
Log4NetHelper.WriteErrorLog(LogType.SAPService, "推送失败" + logTitle + ",返回结果:" + msg);
|
SapSendFailRecodInfoHandler.AddForReverser(res, result, msg);//记录失败表
|
return msg;
|
}
|
}
|
catch (Exception ex)
|
{
|
msg = "WMS异常:" + ex.Message;
|
Log4NetHelper.WriteInfoLog(LogType.SAPService, "推送异常:" + logTitle + ",返回结果:" + msg + ",异常:" + ex.Message);
|
Log4NetHelper.WriteErrorLog(LogType.SAPService, "推送异常:" + logTitle + ",返回结果:" + msg + ",异常:" + ex.Message, ex);
|
|
//失败后,不再推送,看日志即可 【Editby shaocx,2025-09-18】
|
//SapSendFailRecodInfoHandler.AddForReverser(res, result, msg);//记录失败表 [Editby shaocx,2025-06-13]
|
|
return msg;
|
}
|
}
|
|
/// <summary>对收到的物料进行收货确认 【已完结】
|
/// 对收到的物料进行收货确认 【已完结】
|
/// </summary>
|
/// <returns></returns>
|
public static bool ConfirmGR(GRMaterialEntity[] results, out string msg)
|
{
|
msg = "";
|
string info = "";
|
var logTitle = GetSapLog("ConfirmGR", "对收到的物料进行收货确认", JsonConvert.SerializeObject(results));
|
try
|
{
|
Log4NetHelper.WriteInfoLog(LogType.SAPService, "开始推送" + logTitle);
|
info = sendSap.ConfirmGR(results, out msg);
|
//form.textBox6.Text = DateTime.Now.ToString("dd-HH-mm-ss") + "收货,退货成功,凭证:" + info + "返回信息" + msg + "\r\n" + form.textBox6.Text;
|
if (msg == "")
|
{
|
//成功记录到表中
|
SapSendInfoHandler.AddSapSendInfoForSH(JsonConvert.SerializeObject(results), results, info, msg);
|
Log4NetHelper.WriteInfoLog(LogType.SAPService, "推送成功" + logTitle);
|
//logtxt.txtWrite("收货,退货成功,凭证:" + info, 0);
|
return true;
|
}
|
else
|
{
|
//这里是 收货,退货失败? [EditBy shaocx,2022-03-06]
|
Log4NetHelper.WriteInfoLog(LogType.SAPService, "推送失败" + logTitle + ",返回结果:" + msg);
|
Log4NetHelper.WriteErrorLog(LogType.SAPService, "推送失败" + logTitle + ",返回结果:" + msg);
|
//logtxt.txtWrite("收货,退货失败,凭证:" + info + ",返回msg:" + msg, 0);
|
SapSendFailRecodInfoHandler.AddForSH(results, info, msg);//记录失败表
|
return false;
|
}
|
}
|
catch (Exception ex)
|
{
|
msg = "WMS异常:" + ex.Message;
|
Log4NetHelper.WriteInfoLog(LogType.SAPService, "推送异常:" + logTitle + ",返回结果:" + msg + ",异常:" + ex.Message);
|
Log4NetHelper.WriteErrorLog(LogType.SAPService, "推送异常:" + logTitle + ",返回结果:" + msg + ",异常:" + ex.Message, ex);
|
|
//失败后,不再推送,看日志即可 【Editby shaocx,2025-09-18】
|
//SapSendFailRecodInfoHandler.AddForSH(results, info, msg);//记录失败表 [Editby shaocx,2025-06-13]
|
|
return false;
|
}
|
}
|
|
#endregion
|
|
#region 获取
|
|
/// <summary>
|
/// 根据采购单号获取采购单
|
/// </summary>
|
/// <param name="poCode"></param>
|
/// <param name="msg"></param>
|
/// <returns></returns>
|
public static PurchaseOrderEntity GetPurchaseOrder(string poCode, out string msg)
|
{
|
PurchaseOrderEntity resultPo = sendSap.GetPurchaseOrder(poCode, out msg);
|
return resultPo;
|
}
|
|
#endregion
|
|
|
/// <summary>
|
/// 生成基础的日志前缀
|
/// </summary>
|
/// <param name="funSap"></param>
|
/// <param name="funDesc"></param>
|
/// <param name="param"></param>
|
/// <returns></returns>
|
private static string GetSapLog(string funSap, string funDesc, string param)
|
{
|
//如: [ConfirmGR](对收到的物料进行收货确认),参数:
|
return " => [" + funSap + "](" + funDesc + "),参数:" + param;
|
}
|
}
|
}
|