You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1275 lines
59 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Dapper;
using Estsh.Core.Base;
using Estsh.Core.Dapper;
using Estsh.Core.Wms.IRepositories;
using Estsh.Core.Model.Result;
using Estsh.Core.Repositories;
using System.Collections;
using System.Data;
using System.Text;
using System.Text.Json;
using Estsh.Core.Models;
using Newtonsoft.Json.Linq;
using Estsh.Core.Model.EnumUtil;
using Estsh.Core.Util;
using Microsoft.Extensions.Primitives;
using Estsh.Core.Extensions;
namespace Estsh.Core.Wms.Repositories
{
public abstract class WmsResultRepository<T> : IWmsResultRepository<T>, IDependency where T : IfBase
{
protected DapperDbContext dapperDbContext { get; set; }
public WmsResultRepository(DapperDbContext _dapperDbContext)
{
dapperDbContext = _dapperDbContext;
}
/// <summary>
/// 获取WMS执行结果
/// </summary>
/// <returns></returns>
public List<T> GetRusultInfo(string tableName)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
StringBuilder query = new StringBuilder(1024);
query.Append("SELECT top 1000 * ");
query.Append("FROM " + tableName + " (readpast) ");
query.Append("WHERE SYNFLG = 'N' ");
query.Append("ORDER BY RECTIM ");
return dbConn.Query<T>(query.ToString()).ToList();
}
}
public List<WmsJis> GetRusultInfo()
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
StringBuilder query = new StringBuilder(1024);
query.Append("SELECT * ");
query.Append(" from WMS_JIS ");//as a left join (select distinct part_no,is_wings from MES_WMS_PG_RECEIVE ) as b on a.MATNR=b.part_no
query.Append("WHERE SYNFLG = 'N' ");
query.Append("ORDER BY RECTIM ");
return dbConn.Query<WmsJis>(query.ToString()).ToList();
}
}
/// <summary>
/// 将WMS执行结果传到SAP
/// </summary>
/// <returns></returns>
public SapInterfaceResult doResultsPush(List<WmsJis> dataList, string tableName, string interfaceName)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
SapInterfaceResult result = new SapInterfaceResult();
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
StringBuilder sql = new StringBuilder(1024);
DynamicParameters parameters = new DynamicParameters();
sql.Append("select * from sys_if_config (nolock) where method_name = @methodName");
SysIfConfig sysIfConfig = dbConn.QueryFirst<SysIfConfig>(sql.ToString(), new { methodName = interfaceName });
if (sysIfConfig == null)
{
result.success = false;
result.message = "地址获取失败,请检查接口配置表。";
return result;
}
var ZzWmsnums = dataList.Select(a => a.ZzWmsnum).Distinct().ToList();
foreach (var ZzWmsnum in ZzWmsnums)
{
sqlList.Clear();
parametersList.Clear();
var sidList = dataList.Where(a => a.ZzWmsnum == ZzWmsnum).ToList();
string WmsNumGUID = Guid.NewGuid().ToString().Replace("-", "");
SapInterfaceRequest<WmsJis> request = new Model.Result.SapInterfaceRequest<WmsJis>();
request.sid = WmsNumGUID;
request.inum = sysIfConfig.IfCode;
request.objModel = sidList;
string responseResult = HttpClientHelper.HttpPostByJsonMathod(sysIfConfig.IfUrl, request);
if (!string.IsNullOrEmpty(responseResult.ToString()))
{
sql.Clear();
sql.Append("update " + tableName + " set ");
sql.Append(" SYNFLG = @SYNFLG,SYNTIM=@SYNTIM,ERRMSG=@ERRMSG ");
sql.Append("where ZZ_WMSNUM=@ZZ_WMSNUM");
sqlList.Add(sql.ToString());
parameters = new DynamicParameters();
parameters.Add("@ZZ_WMSNUM", ZzWmsnum);
parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间
if (responseResult.Contains("message"))
{
result = Newtonsoft.Json.JsonConvert.DeserializeObject<SapInterfaceResult>(responseResult);
parameters.Add("@ERRMSG", result.message);//异常消息
if (result.success == true)
{
parameters.Add("@SYNFLG", "Y");//同步状态
}
else
{
parameters.Add("@SYNFLG", "E");//同步状态
}
}
else
{
if (!responseResult.Contains("500 Internal Server Error"))
{
parameters.Add("@ERRMSG", responseResult);//异常消息
parameters.Add("@SYNFLG", "E");//同步状态
}
}
parametersList.Add(parameters);
sql.Clear();
sql.Append("INSERT INTO dbo.OQ(SID,CRETIM,XMLCON,ACTFLG) ");
sql.Append(" VALUES(@SID,@CRETIM,@XMLCON,@ACTFLG) ");
sqlList.Add(sql.ToString());
parameters = new DynamicParameters();
parameters.Add("@SID", WmsNumGUID);
parameters.Add("@CRETIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
parameters.Add("@XMLCON", Newtonsoft.Json.JsonConvert.SerializeObject(sidList));
parameters.Add("@ACTFLG", 'N');
parametersList.Add(parameters);
this.ExecuteTransaction(sqlList, parametersList);
}
}
result.message = "执行同步完成";
return result;
}
}
#region
/// <summary>
/// WMS把确认的盘点结果传到SAP
/// </summary>
/// <returns></returns>
public List<WmsCycr> GetInventoryResultsInfo()
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
StringBuilder query = new StringBuilder(1024);
query.Append("SELECT * ");
query.Append("FROM wms_cycr (readpast) ");
query.Append("WHERE SYNFLG = 'N' ");
query.Append("ORDER BY RECTIM ");
return dbConn.Query<WmsCycr>(query.ToString()).ToList();
}
}
/// <summary>
/// 添加WMS把确认的盘点结果传到SAP
/// </summary>
/// <param name="sapCu"></param>
/// <returns></returns>
public SapInterfaceResult InsertInventoryResultsInfo(List<WmsCycr> cycrList)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
SapInterfaceResult result = new SapInterfaceResult();
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
StringBuilder sql = new StringBuilder(1024);
DynamicParameters parameters = new DynamicParameters();
sql.Append("select * from sys_if_config (nolock) where method_name='InsertInventoryResultsInfo'");
SysIfConfig sysIfConfig = dbConn.QueryFirst<SysIfConfig>(sql.ToString());
if (sysIfConfig == null)
{
result.success = false;
result.message = "地址获取失败,请检查接口配置表。";
return result;
}
var cycrSids = cycrList.Select(a => a.Sid).Distinct().ToList();
foreach (var cycrSid in cycrSids)
{
var cycrSidList = cycrList.Where(a => a.Sid == cycrSid).ToList();
SapInterfaceRequest<WmsCycr> request = new Model.Result.SapInterfaceRequest<WmsCycr>();
request.sid = cycrSid;
request.inum = sysIfConfig.IfCode;
request.objModel = cycrSidList;
string responseResult = HttpClientHelper.HttpPostByJsonMathod(sysIfConfig.IfUrl, request);
if (!string.IsNullOrEmpty(responseResult.ToString()))
{
sql.Clear();
sql.Append("update wms_cycr set ");
sql.Append(" SYNFLG = @SYNFLG,SYNTIM=@SYNTIM,ERRMSG=@ERRMSG ");
sql.Append("where SID=@SID");
sqlList.Add(sql.ToString());
parameters = new DynamicParameters();
parameters.Add("@SID", cycrSid);
parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间
parameters.Add("@ERRMSG", responseResult);//异常消息
if (responseResult.Contains("message"))
{
result = Newtonsoft.Json.JsonConvert.DeserializeObject<SapInterfaceResult>(responseResult);
if (result.success == true)
{
parameters.Add("@SYNFLG", "Y");//同步状态
}
else
{
parameters.Add("@SYNFLG", "E");//同步状态
}
}
else
{
parameters.Add("@SYNFLG", "E");//同步状态
}
parametersList.Add(parameters);
sql.Clear();
sql.Append("INSERT INTO dbo.OQ(SID,CRETIM,XMLCON,ACTFLG) ");
sql.Append(" VALUES(@SID,@CRETIM,@XMLCON,@ACTFLG) ");
sqlList.Add(sql.ToString());
parameters = new DynamicParameters();
parameters.Add("@SID", Guid.NewGuid().ToString().Replace("-", ""));
parameters.Add("@CRETIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
parameters.Add("@XMLCON", Newtonsoft.Json.JsonConvert.SerializeObject(cycrSidList));
parameters.Add("@ACTFLG", 'N');
parametersList.Add(parameters);
this.ExecuteTransaction(sqlList, parametersList);
}
}
result.message = "执行同步完成";
return result;
}
}
/// <summary>
/// WMS把采购收货的质检判定结果合格入库信息传到SAP
/// </summary>
/// <returns></returns>
public List<WmsInqc> GetQualityInspectionResultsInfo()
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
StringBuilder sql = new StringBuilder(1024);
sql.Append("SELECT * FROM wms_inqc (readpast) ");
sql.Append("WHERE synflg in = 'N' ");//未同步数据
sql.Append("order by RECTIM ");
return dbConn.Query<WmsInqc>(sql.ToString()).ToList();
}
}
/// <summary>
/// 添加WMS把采购收货的质检判定结果合格入库信息传到SAP
/// </summary>
/// <param name="sapCu"></param>
/// <returns></returns>
public SapInterfaceResult InsertQualityInspectionResultsInfo(List<WmsInqc> wmsInqcs)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
SapInterfaceResult result = new SapInterfaceResult();
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
StringBuilder sql = new StringBuilder(1024);
DynamicParameters parameters = new DynamicParameters();
sql.Append("select * from sys_if_config (nolock) where method_name='InsertQualityInspectionResultsInfo'");
SysIfConfig sysIfConfig = dbConn.QueryFirst<SysIfConfig>(sql.ToString());
if (sysIfConfig == null)
{
result.success = false;
result.message = "地址获取失败,请检查接口配置表。";
return result;
}
var inqcSids = wmsInqcs.Select(a => a.Sid).Distinct().ToList();
foreach (var movrSid in inqcSids)
{
var inqcSidList = wmsInqcs.Where(a => a.Sid == movrSid).ToList();
SapInterfaceRequest<WmsInqc> request = new Model.Result.SapInterfaceRequest<WmsInqc>();
request.sid = movrSid;
request.inum = sysIfConfig.IfCode;
request.objModel = inqcSidList;
string responseResult = HttpClientHelper.HttpPostByJsonMathod(sysIfConfig.IfUrl, request);
if (!string.IsNullOrEmpty(responseResult.ToString()))
{
sql.Clear();
sql.Append("update wms_movr set ");
sql.Append(" SYNFLG = @SYNFLG,SYNTIM=@SYNTIM,ERRMSG=@ERRMSG ");
sql.Append("where SID=@SID");
sqlList.Add(sql.ToString());
parameters = new DynamicParameters();
parameters.Add("@SID", movrSid);
parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间
parameters.Add("@ERRMSG", responseResult);//异常消息
if (responseResult.Contains("message"))
{
result = Newtonsoft.Json.JsonConvert.DeserializeObject<SapInterfaceResult>(responseResult);
if (result.success == true)
{
parameters.Add("@SYNFLG", "Y");//同步状态
}
else
{
parameters.Add("@SYNFLG", "E");//同步状态
}
}
else
{
parameters.Add("@SYNFLG", "E");//同步状态
}
parametersList.Add(parameters);
sql.Clear();
sql.Append("INSERT INTO dbo.OQ(SID,CRETIM,XMLCON,ACTFLG) ");
sql.Append(" VALUES(@SID,@CRETIM,@XMLCON,@ACTFLG) ");
sqlList.Add(sql.ToString());
parameters = new DynamicParameters();
parameters.Add("@SID", Guid.NewGuid().ToString().Replace("-", ""));
parameters.Add("@CRETIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
parameters.Add("@XMLCON", Newtonsoft.Json.JsonConvert.SerializeObject(inqcSidList));
parameters.Add("@ACTFLG", 'N');
parametersList.Add(parameters);
this.ExecuteTransaction(sqlList, parametersList);
}
}
result.message = "执行同步完成";
return result;
}
}
/// <summary>
/// WMS把退货过帐结果传到SAP
/// </summary>
/// <returns></returns>
public List<WmsRetr> GetSupplierReturnResultInfo()
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
StringBuilder sql = new StringBuilder(1024);
sql.Append("SELECT * FROM wms_retr (readpast) ");
sql.Append("WHERE SYNFLG = 'N' ");
sql.Append("ORDER BY RECTIM ");
return dbConn.Query<WmsRetr>(sql.ToString()).ToList();
}
}
/// <summary>
/// 添加WMS把退货过帐结果传到SAP
/// </summary>
/// <param name="sapCu"></param>
/// <returns></returns>
public SapInterfaceResult InsertSupplierReturnResultInfo(List<WmsRetr> wmsRetrs)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
SapInterfaceResult sapInterfaceResult = new SapInterfaceResult();
StringBuilder ifSqlStringBuilder = new StringBuilder(1024);
ifSqlStringBuilder.Append("select * from sys_if_config (nolock) where method_name='InsertSupplierReturnResultInfo'");
SysIfConfig sysIfConfig = dbConn.QueryFirst<SysIfConfig>(ifSqlStringBuilder.ToString());
if (sysIfConfig == null)
{
sapInterfaceResult.success = false;
sapInterfaceResult.message = "地址获取失败,请检查接口配置表。";
return sapInterfaceResult;
}
string url = sysIfConfig.IfUrl;//获取接口地址
StringBuilder OQSqlStringBuilder = new StringBuilder(1024);
OQSqlStringBuilder.Append("INSERT INTO dbo.OQ(SID,CRETIM,XMLCON,ACTFLG) ");
OQSqlStringBuilder.Append(" VALUES(@SID,@CRETIM,@XMLCON,@ACTFLG) ");
DynamicParameters OQdynamic = new DynamicParameters();
OQdynamic.Add("@SID", Guid.NewGuid().ToString().Replace("-", ""));
OQdynamic.Add("@CRETIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
OQdynamic.Add("@XMLCON", Newtonsoft.Json.JsonConvert.SerializeObject(wmsRetrs));
OQdynamic.Add("@ACTFLG", 'N');
dbConn.Execute(OQSqlStringBuilder.ToString(), OQdynamic);
SapInterfaceRequest<WmsRetr> request = new Model.Result.SapInterfaceRequest<WmsRetr>();
request.sid = Guid.NewGuid().ToString().Replace("-", "");
request.inum = sysIfConfig.IfCode;//接口编码
request.objModel = wmsRetrs;
string responseResult = HttpClientHelper.HttpPostByJsonMathod(url, request);
if (string.IsNullOrEmpty(responseResult))
{
sapInterfaceResult.success = false;
sapInterfaceResult.message = "供应商退货结果接口-返回值为空";
return sapInterfaceResult;
}
if (responseResult.Contains("message"))
{
SapInterfaceResult result = Newtonsoft.Json.JsonConvert.DeserializeObject<SapInterfaceResult>(responseResult);
if (result.success == true)
{
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
for (int i = 0; i < wmsRetrs.Count; i++)
{
WmsRetr wmsRetr = wmsRetrs[i];
StringBuilder sql = new StringBuilder(1024);
sql.Append("update wms_retr set ");
sql.Append(" SYNFLG = 'Y',SYNTIM=@SYNTIM,ERRMSG=@ERRMSG ");
sql.Append("where ZINSTNO=@ZINSTNO and ZEILE=@ZEILE and MATNR=@MATNR");
sqlList.Add(sql.ToString());
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@ZINSTNO", wmsRetr.Zinstno);//编号
parameters.Add("@ZEILE", wmsRetr.Zeile);//行号
parameters.Add("@MATNR", wmsRetr.Matnr);//物料编码
parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间
parameters.Add("@ERRMSG", result.message);//消息
parametersList.Add(parameters);
}
this.ExecuteTransaction(sqlList, parametersList);
return result;
}
else
{
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
for (int i = 0; i < wmsRetrs.Count; i++)
{
WmsRetr wmsRetr = wmsRetrs[i];
StringBuilder sql = new StringBuilder(1024);
sql.Append("update wms_retr set ");
sql.Append(" SYNFLG = 'E',SYNTIM=@SYNTIM,ERRMSG=@ERRMSG ");
sql.Append("where ZINSTNO=@ZINSTNO and ZEILE=@ZEILE and MATNR=@MATNR");
sqlList.Add(sql.ToString());
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@ZINSTNO", wmsRetr.Zinstno);//编号
parameters.Add("@ZEILE", wmsRetr.Zeile);//行号
parameters.Add("@MATNR", wmsRetr.Matnr);//物料编码
parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间
parameters.Add("@ERRMSG", result.message);//异常消息
parametersList.Add(parameters);
}
this.ExecuteTransaction(sqlList, parametersList);
return result;
}
}
else
{
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
for (int i = 0; i < wmsRetrs.Count; i++)
{
WmsRetr wmsRetr = wmsRetrs[i];
StringBuilder sql = new StringBuilder(1024);
sql.Append("update wms_retr set ");
sql.Append(" SYNFLG = 'E',SYNTIM=@SYNTIM,ERRMSG=@ERRMSG ");
sql.Append("where ZINSTNO=@ZINSTNO and ZEILE=@ZEILE and MATNR=@MATNR");
sqlList.Add(sql.ToString());
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@ZINSTNO", wmsRetr.Zinstno);//编号
parameters.Add("@ZEILE", wmsRetr.Zeile);//行号
parameters.Add("@MATNR", wmsRetr.Matnr);//物料编码
parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间
parameters.Add("@ERRMSG", responseResult);//异常消息
parametersList.Add(parameters);
}
this.ExecuteTransaction(sqlList, parametersList);
SapInterfaceResult result = new SapInterfaceResult();
result.success = false;
result.message = responseResult;
return result;
}
}
}
/// <summary>
/// WMS把库存物料的转储从SAP的一个库存地点到另一个库存地点或报废出库委外发运、零星出入库执行结果传到SAP
/// </summary>
/// <returns></returns>
public List<WmsMovr> GetInventoryDumpResultInfo()
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
StringBuilder sql = new StringBuilder(1024);
sql.Append("SELECT * FROM wms_movr (readpast) ");
sql.Append("WHERE SYNFLG = 'N' ");
sql.Append("ORDER BY RECTIM ");
return dbConn.Query<WmsMovr>(sql.ToString()).ToList();
}
}
/// <summary>
/// 添加WMS把库存物料的转储从SAP的一个库存地点到另一个库存地点或报废出库委外发运、零星出入库执行结果传到SAP
/// </summary>
/// <param name="sapCu"></param>
/// <returns></returns>
public SapInterfaceResult InsertInventoryDumpResultInfo(List<WmsMovr> wmsMovrs)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
SapInterfaceResult result = new SapInterfaceResult();
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
StringBuilder sql = new StringBuilder(1024);
DynamicParameters parameters = new DynamicParameters();
sql.Append("select * from sys_if_config (nolock) where method_name='InsertInventoryDumpResultInfo'");
SysIfConfig sysIfConfig = dbConn.QueryFirst<SysIfConfig>(sql.ToString());
if (sysIfConfig == null)
{
result.success = false;
result.message = "地址获取失败,请检查接口配置表。";
return result;
}
var movrSids = wmsMovrs.Select(a => a.Sid).Distinct().ToList();
foreach (var movrSid in movrSids)
{
var movrSidList = wmsMovrs.Where(a => a.Sid == movrSid).ToList();
SapInterfaceRequest<WmsMovr> request = new Model.Result.SapInterfaceRequest<WmsMovr>();
request.sid = movrSid;
request.inum = sysIfConfig.IfCode;
request.objModel = movrSidList;
string responseResult = HttpClientHelper.HttpPostByJsonMathod(sysIfConfig.IfUrl, request);
if (!string.IsNullOrEmpty(responseResult.ToString()))
{
sql.Clear();
sql.Append("update wms_movr set ");
sql.Append(" SYNFLG = @SYNFLG,SYNTIM=@SYNTIM,ERRMSG=@ERRMSG ");
sql.Append("where SID=@SID");
sqlList.Add(sql.ToString());
parameters = new DynamicParameters();
parameters.Add("@SID", movrSid);
parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间
parameters.Add("@ERRMSG", responseResult);//异常消息
if (responseResult.Contains("message"))
{
result = Newtonsoft.Json.JsonConvert.DeserializeObject<SapInterfaceResult>(responseResult);
if (result.success == true)
{
parameters.Add("@SYNFLG", "Y");//同步状态
}
else
{
parameters.Add("@SYNFLG", "E");//同步状态
}
}
else
{
parameters.Add("@SYNFLG", "E");//同步状态
}
parametersList.Add(parameters);
sql.Clear();
sql.Append("INSERT INTO dbo.OQ(SID,CRETIM,XMLCON,ACTFLG) ");
sql.Append(" VALUES(@SID,@CRETIM,@XMLCON,@ACTFLG) ");
sqlList.Add(sql.ToString());
parameters = new DynamicParameters();
parameters.Add("@SID", Guid.NewGuid().ToString().Replace("-", ""));
parameters.Add("@CRETIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
parameters.Add("@XMLCON", Newtonsoft.Json.JsonConvert.SerializeObject(movrSidList));
parameters.Add("@ACTFLG", 'N');
parametersList.Add(parameters);
this.ExecuteTransaction(sqlList, parametersList);
}
}
result.message = "执行同步完成";
return result;
}
}
/// <summary>
/// WMS将每次发运的信息传递给SAP,SAP用于创建交货单。
/// </summary>
/// <returns></returns>
public List<WmsJis> GetSalesAndShippingResultsInfo()
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
StringBuilder sql = new StringBuilder(1024);
sql.Append("SELECT * FROM wms_jis (readpast) ");
sql.Append("WHERE SYNFLG = 'N' ");
sql.Append("ORDER BY RECTIM ");
return dbConn.Query<WmsJis>(sql.ToString()).ToList();
}
}
/// <summary>
/// 添加WMS将每次发运的信息传递给SAP,SAP用于创建交货单。
/// </summary>
/// <param name="sapCu"></param>
/// <returns></returns>
public SapInterfaceResult InsertSalesAndShippingResultsInfo(List<WmsJis> wmsJisInterfaces)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
SapInterfaceResult sapInterfaceResult = new SapInterfaceResult();
StringBuilder ifSqlStringBuilder = new StringBuilder(1024);
ifSqlStringBuilder.Append("select * from sys_if_config (nolock) where method_name='InsertSalesAndShippingResultsInfo'");
SysIfConfig sysIfConfig = dbConn.QueryFirst<SysIfConfig>(ifSqlStringBuilder.ToString());
if (sysIfConfig == null)
{
sapInterfaceResult.success = false;
sapInterfaceResult.message = "地址获取失败,请检查接口配置表。";
return sapInterfaceResult;
}
string url = sysIfConfig.IfUrl;//获取接口地址
StringBuilder OQSqlStringBuilder = new StringBuilder(1024);
OQSqlStringBuilder.Append("INSERT INTO dbo.OQ(SID,CRETIM,XMLCON,ACTFLG) ");
OQSqlStringBuilder.Append(" VALUES(@SID,@CRETIM,@XMLCON,@ACTFLG) ");
DynamicParameters OQdynamic = new DynamicParameters();
OQdynamic.Add("@SID", Guid.NewGuid().ToString().Replace("-", ""));
OQdynamic.Add("@CRETIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
OQdynamic.Add("@XMLCON", Newtonsoft.Json.JsonConvert.SerializeObject(wmsJisInterfaces));
OQdynamic.Add("@ACTFLG", 'N');
dbConn.Execute(OQSqlStringBuilder.ToString(), OQdynamic);
SapInterfaceRequest<WmsJis> request = new Model.Result.SapInterfaceRequest<WmsJis>();
request.sid = Guid.NewGuid().ToString().Replace("-", "");
request.inum = sysIfConfig.IfCode;//接口编码
request.objModel = wmsJisInterfaces;
string responseResult = HttpClientHelper.HttpPostByJsonMathod(url, request);
if (string.IsNullOrEmpty(responseResult))
{
sapInterfaceResult.success = false;
sapInterfaceResult.message = "销售发货结果JIS接口-返回值为空";
return sapInterfaceResult;
}
if (responseResult.Contains("message"))
{
SapInterfaceResult result = Newtonsoft.Json.JsonConvert.DeserializeObject<SapInterfaceResult>(responseResult);
if (result.success == true)
{
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
for (int i = 0; i < wmsJisInterfaces.Count; i++)
{
WmsJis wmsJis = wmsJisInterfaces[i];
StringBuilder sql = new StringBuilder(1024);
sql.Append("update wms_jis set ");
sql.Append(" SYNFLG = 'Y',SYNTIM=@SYNTIM,ERRMSG=@ERRMSG ");
sql.Append("where ZZ_WMSNUM=@ZZ_WMSNUM and MATNR=@MATNR");
sqlList.Add(sql.ToString());
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@ZZ_WMSNUM", wmsJis.ZzWmsnum);//WMS发运单据号按车
parameters.Add("@MATNR", wmsJis.Matnr);//物料号
parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间
parameters.Add("@ERRMSG", result.message);//消息
parametersList.Add(parameters);
}
this.ExecuteTransaction(sqlList, parametersList);
return result;
}
else
{
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
for (int i = 0; i < wmsJisInterfaces.Count; i++)
{
WmsJis wmsJis = wmsJisInterfaces[i];
StringBuilder sql = new StringBuilder(1024);
sql.Append("update wms_jis set ");
sql.Append(" SYNFLG = 'E',SYNTIM=@SYNTIM,ERRMSG=@ERRMSG ");
sql.Append("where ZZ_WMSNUM=@ZZ_WMSNUM and MATNR=@MATNR");
sqlList.Add(sql.ToString());
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@ZZ_WMSNUM", wmsJis.ZzWmsnum);//WMS发运单据号按车
parameters.Add("@MATNR", wmsJis.Matnr);//物料号
parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间
parameters.Add("@ERRMSG", result.message);//异常消息
parametersList.Add(parameters);
}
this.ExecuteTransaction(sqlList, parametersList);
return result;
}
}
else
{
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
for (int i = 0; i < wmsJisInterfaces.Count; i++)
{
WmsJis wmsJis = wmsJisInterfaces[i];
StringBuilder sql = new StringBuilder(1024);
sql.Append("update wms_jis set ");
sql.Append(" SYNFLG = 'E',SYNTIM=@SYNTIM,ERRMSG=@ERRMSG ");
sql.Append("where ZZ_WMSNUM=@ZZ_WMSNUM and MATNR=@MATNR");
sqlList.Add(sql.ToString());
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@ZZ_WMSNUM", wmsJis.ZzWmsnum);//WMS发运单据号按车
parameters.Add("@MATNR", wmsJis.Matnr);//物料号
parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间
parameters.Add("@ERRMSG", responseResult);//异常消息
parametersList.Add(parameters);
}
this.ExecuteTransaction(sqlList, parametersList);
SapInterfaceResult result = new SapInterfaceResult();
result.success = false;
result.message = responseResult;
return result;
}
}
}
/// <summary>
/// WMS将每次发运的信息传递给SAP,SAP用于对交货单发货。
/// </summary>
/// <returns></returns>
public List<WmsNjsi> GetSalesAndDeliveryPlansInfo()
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
StringBuilder sql = new StringBuilder(1024);
sql.Append("SELECT * FROM wms_njsi (readpast) ");
sql.Append("WHERE SYNFLG = 'N' ");
sql.Append("ORDER BY RECTIM ");
return dbConn.Query<WmsNjsi>(sql.ToString()).ToList();
}
}
/// <summary>
/// 添加WMS将每次发运的信息传递给SAP,SAP用于对交货单发货。
/// </summary>
/// <param name="sapCu"></param>
/// <returns></returns>
public SapInterfaceResult InsertSalesAndDeliveryPlanInfo(List<WmsNjsi> wmsNjsis)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
SapInterfaceResult result = new SapInterfaceResult();
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
StringBuilder sql = new StringBuilder(1024);
DynamicParameters parameters = new DynamicParameters();
sql.Append("select * from sys_if_config (nolock) where method_name='InsertSalesAndDeliveryPlanInfo'");
SysIfConfig sysIfConfig = dbConn.QueryFirst<SysIfConfig>(sql.ToString());
if (sysIfConfig == null)
{
result.success = false;
result.message = "地址获取失败,请检查接口配置表。";
return result;
}
var njsiSids = wmsNjsis.Select(a => a.Sid).Distinct().ToList();
foreach (var movrSid in njsiSids)
{
var njsiSidList = wmsNjsis.Where(a => a.Sid == movrSid).ToList();
SapInterfaceRequest<WmsNjsi> request = new Model.Result.SapInterfaceRequest<WmsNjsi>();
request.sid = movrSid;
request.inum = sysIfConfig.IfCode;
request.objModel = njsiSidList;
string responseResult = HttpClientHelper.HttpPostByJsonMathod(sysIfConfig.IfUrl, request);
if (!string.IsNullOrEmpty(responseResult.ToString()))
{
sql.Clear();
sql.Append("update wms_movr set ");
sql.Append(" SYNFLG = @SYNFLG,SYNTIM=@SYNTIM,ERRMSG=@ERRMSG ");
sql.Append("where SID=@SID");
sqlList.Add(sql.ToString());
parameters = new DynamicParameters();
parameters.Add("@SID", movrSid);
parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间
parameters.Add("@ERRMSG", responseResult);//异常消息
if (responseResult.Contains("message"))
{
result = Newtonsoft.Json.JsonConvert.DeserializeObject<SapInterfaceResult>(responseResult);
if (result.success == true)
{
parameters.Add("@SYNFLG", "Y");//同步状态
}
else
{
parameters.Add("@SYNFLG", "E");//同步状态
}
}
else
{
parameters.Add("@SYNFLG", "E");//同步状态
}
parametersList.Add(parameters);
sql.Clear();
sql.Append("INSERT INTO dbo.OQ(SID,CRETIM,XMLCON,ACTFLG) ");
sql.Append(" VALUES(@SID,@CRETIM,@XMLCON,@ACTFLG) ");
sqlList.Add(sql.ToString());
parameters = new DynamicParameters();
parameters.Add("@SID", Guid.NewGuid().ToString().Replace("-", ""));
parameters.Add("@CRETIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
parameters.Add("@XMLCON", Newtonsoft.Json.JsonConvert.SerializeObject(njsiSidList));
parameters.Add("@ACTFLG", 'N');
parametersList.Add(parameters);
this.ExecuteTransaction(sqlList, parametersList);
}
}
result.message = "执行同步完成";
return result;
}
}
/// <summary>
/// WMS将每次发运的信息传递给SAP,SAP用于对交货单发货。
/// </summary>
/// <returns></returns>
public List<MesMovtrn> GetProductionReportInfo()
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
StringBuilder sql = new StringBuilder(1024);
sql.Append("SELECT * FROM MES_MOVTRN (readpast) ");
sql.Append("WHERE SYNFLG = 'N' ");
sql.Append("ORDER BY RECTIM ");
return dbConn.Query<MesMovtrn>(sql.ToString()).ToList();
}
}
/// <summary>
/// 添加MES发送生产汇报信息给SAP
/// </summary>
/// <param name="sapCu"></param>
/// <returns></returns>
public SapInterfaceResult InsertProductionReportInfo(List<MesMovtrn> mesMovtrns)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
SapInterfaceResult result = new SapInterfaceResult();
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
StringBuilder sql = new StringBuilder(1024);
DynamicParameters parameters = new DynamicParameters();
sql.Append("select * from sys_if_config (nolock) where method_name='InsertProductionReportInfo'");
SysIfConfig sysIfConfig = dbConn.QueryFirst<SysIfConfig>(sql.ToString());
if (sysIfConfig == null)
{
result.success = false;
result.message = "地址获取失败,请检查接口配置表。";
return result;
}
var movtrnSids = mesMovtrns.Select(a => a.Sid).Distinct().ToList();
foreach (var movtrnSid in movtrnSids)
{
var movtrnSidList = mesMovtrns.Where(a => a.Sid == movtrnSid).ToList();
SapInterfaceRequest<MesMovtrn> request = new Model.Result.SapInterfaceRequest<MesMovtrn>();
request.sid = movtrnSid;
request.inum = sysIfConfig.IfCode;
request.objModel = movtrnSidList;
string responseResult = HttpClientHelper.HttpPostByJsonMathod(sysIfConfig.IfUrl, request);
if (!string.IsNullOrEmpty(responseResult.ToString()))
{
sql.Clear();
sql.Append("update MES_MOVTRN set ");
sql.Append(" SYNFLG = @SYNFLG,SYNTIM=@SYNTIM,ERRMSG=@ERRMSG ");
sql.Append("where SID=@SID");
sqlList.Add(sql.ToString());
parameters = new DynamicParameters();
parameters.Add("@SID", movtrnSid);
parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间
parameters.Add("@ERRMSG", responseResult);//异常消息
if (responseResult.Contains("message"))
{
result = Newtonsoft.Json.JsonConvert.DeserializeObject<SapInterfaceResult>(responseResult);
if (result.success == true)
{
parameters.Add("@SYNFLG", "Y");//同步状态
}
else
{
parameters.Add("@SYNFLG", "E");//同步状态
}
}
else
{
parameters.Add("@SYNFLG", "E");//同步状态
}
parametersList.Add(parameters);
sql.Clear();
sql.Append("INSERT INTO dbo.OQ(SID,CRETIM,XMLCON,ACTFLG) ");
sql.Append(" VALUES(@SID,@CRETIM,@XMLCON,@ACTFLG) ");
sqlList.Add(sql.ToString());
parameters = new DynamicParameters();
parameters.Add("@SID", Guid.NewGuid().ToString().Replace("-", ""));
parameters.Add("@CRETIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
parameters.Add("@XMLCON", Newtonsoft.Json.JsonConvert.SerializeObject(movtrnSidList));
parameters.Add("@ACTFLG", 'N');
parametersList.Add(parameters);
this.ExecuteTransaction(sqlList, parametersList);
}
}
result.message = "执行同步完成";
return result;
//SapInterfaceResult sapInterfaceResult = new SapInterfaceResult();
//StringBuilder ifSqlStringBuilder = new StringBuilder(1024);
//ifSqlStringBuilder.Append("select * from sys_if_config (nolock) where method_name='InsertProductionReportInfo'");
//SysIfConfig sysIfConfig = dbConn.QueryFirst<SysIfConfig>(ifSqlStringBuilder.ToString());
//if (sysIfConfig == null)
//{
// sapInterfaceResult.success = false;
// sapInterfaceResult.message = "地址获取失败,请检查接口配置表。";
// return sapInterfaceResult;
//}
//string url = sysIfConfig.IfUrl;//获取接口地址
//StringBuilder OQSqlStringBuilder = new StringBuilder(1024);
//OQSqlStringBuilder.Append("INSERT INTO dbo.OQ(SID,CRETIM,XMLCON,ACTFLG) ");
//OQSqlStringBuilder.Append(" VALUES(@SID,@CRETIM,@XMLCON,@ACTFLG) ");
//DynamicParameters OQdynamic = new DynamicParameters();
//OQdynamic.Add("@SID", Guid.NewGuid().ToString().Replace("-", ""));
//OQdynamic.Add("@CRETIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
//OQdynamic.Add("@XMLCON", Newtonsoft.Json.JsonConvert.SerializeObject(mesMovtrns));
//OQdynamic.Add("@ACTFLG", 'N');
//dbConn.Execute(OQSqlStringBuilder.ToString(), OQdynamic);
//SapInterfaceRequest<MesMovtrnInterface> request = new Model.Result.SapInterfaceRequest<MesMovtrnInterface>();
//request.sid = Guid.NewGuid().ToString().Replace("-", "");
//request.inum = sysIfConfig.IfCode;//接口编码
//request.objModel = mesMovtrns;
//string responseResult = HttpClientHelper.HttpPostByJsonMathod(url, request);
//if (string.IsNullOrEmpty(responseResult))
//{
// sapInterfaceResult.success = false;
// sapInterfaceResult.message = "生产汇报接口-返回值为空";
// return sapInterfaceResult;
//}
//if (responseResult.Contains("message"))
//{
// SapInterfaceResult result = Newtonsoft.Json.JsonConvert.DeserializeObject<SapInterfaceResult>(responseResult);
// if (result.success == true)
// {
// List<string> sqlList = new List<string>();
// List<DynamicParameters> parametersList = new List<DynamicParameters>();
// for (int i = 0; i < mesMovtrns.Count; i++)
// {
// MesMovtrnInterface mesMovtrn = mesMovtrns[i];
// StringBuilder sql = new StringBuilder(1024);
// sql.Append("update MES_MOVTRN set ");
// sql.Append(" SYNFLG = 'Y',SYNTIM=@SYNTIM,ERRMSG=@ERRMSG ");
// sql.Append("where GUID=@GUID");
// sqlList.Add(sql.ToString());
// DynamicParameters parameters = new DynamicParameters();
// parameters.Add("@GUID", mesMovtrn.Guid);//
// parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间
// parameters.Add("@ERRMSG", result.message);//消息
// parametersList.Add(parameters);
// }
// this.ExecuteTransaction(sqlList, parametersList);
// return result;
// }
// else
// {
// List<string> sqlList = new List<string>();
// List<DynamicParameters> parametersList = new List<DynamicParameters>();
// for (int i = 0; i < mesMovtrns.Count; i++)
// {
// MesMovtrnInterface mesMovtrn = mesMovtrns[i];
// StringBuilder sql = new StringBuilder(1024);
// sql.Append("update MES_MOVTRN set ");
// sql.Append(" SYNFLG = 'E',SYNTIM=@SYNTIM,ERRMSG=@ERRMSG ");
// sql.Append("where GUID=@GUID");
// sqlList.Add(sql.ToString());
// DynamicParameters parameters = new DynamicParameters();
// parameters.Add("@GUID", mesMovtrn.Guid);//
// parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间
// parameters.Add("@ERRMSG", result.message);//异常消息
// parametersList.Add(parameters);
// }
// this.ExecuteTransaction(sqlList, parametersList);
// return result;
// }
//}
//else
//{
// List<string> sqlList = new List<string>();
// List<DynamicParameters> parametersList = new List<DynamicParameters>();
// for (int i = 0; i < mesMovtrns.Count; i++)
// {
// MesMovtrnInterface mesMovtrn = mesMovtrns[i];
// StringBuilder sql = new StringBuilder(1024);
// sql.Append("update MES_MOVTRN set ");
// sql.Append(" SYNFLG = 'E',SYNTIM=@SYNTIM,ERRMSG=@ERRMSG ");
// sql.Append("where ruid=@ruid");
// sqlList.Add(sql.ToString());
// DynamicParameters parameters = new DynamicParameters();
// parameters.Add("@GUID", mesMovtrn.Guid);//
// parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间
// parameters.Add("@ERRMSG", responseResult);//异常消息
// parametersList.Add(parameters);
// }
// this.ExecuteTransaction(sqlList, parametersList);
// SapInterfaceResult result = new SapInterfaceResult();
// result.success = false;
// result.message = responseResult;
// return result;
//}
}
}
#endregion
/// <summary>
/// 批量执行sql带事务
/// </summary>
/// <param name="sqlStrings"></param>
/// <param name="parameterList"></param>
/// <param name="commandTimeout"></param>
/// <returns></returns>
public bool ExecuteTransaction(List<string> sqlStrings, List<DynamicParameters> parameterList, int? commandTimeout = null)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
bool isClosed = dbConn.State == ConnectionState.Closed;
if (isClosed)
{
dbConn.Open();
}
//开启事务
using (var transaction = dbConn.BeginTransaction())
{
try
{
bool successCount = true;
for (int i = 0; i < sqlStrings.Count; i++)
{
dbConn.Execute(sqlStrings[i], parameterList[i], transaction, commandTimeout);
}
//提交事务
transaction.Commit();
return true;
}
catch (Exception ex)
{
//回滚事务
LogHelper.Error("ExecuteTransaction", ex);
transaction.Rollback();
dbConn.Close();
dbConn.Dispose();
throw ex;
}
finally
{
dbConn.Close();
dbConn.Dispose();
}
}
}
}
public SapInterfaceResult doResultsPush(List<T> dataList, string tableName, string interfaceName)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
SapInterfaceResult result = new SapInterfaceResult();
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
StringBuilder sql = new StringBuilder(1024);
DynamicParameters parameters = new DynamicParameters();
sql.Append("select * from sys_if_config (nolock) where method_name = @methodName");
SysIfConfig sysIfConfig = dbConn.QueryFirst<SysIfConfig>(sql.ToString(), new { methodName = interfaceName });
if (sysIfConfig == null)
{
result.success = false;
result.message = "地址获取失败,请检查接口配置表。";
return result;
}
var sids = dataList.Select(a => a.Sid).Distinct().ToList();
var lastSid = dataList.Last();
foreach (var cycrSid in sids)
{
// 清除sql执行list。
sqlList.Clear();
parametersList.Clear();
if (dataList.Count == 1000)
{
if (cycrSid == lastSid.Sid)
continue;
}
var sidList = dataList.Where(a => a.Sid == cycrSid).ToList();
SapInterfaceRequest<T> request = new Model.Result.SapInterfaceRequest<T>();
request.sid = cycrSid;
request.inum = sysIfConfig.IfCode;
request.objModel = sidList;
string responseResult = HttpClientHelper.HttpPostByJsonMathod(sysIfConfig.IfUrl, request);
if (!string.IsNullOrEmpty(responseResult.ToString()))
{
sql.Clear();
sql.Append("update " + tableName + " set ");
sql.Append(" SYNFLG = @SYNFLG,SYNTIM=@SYNTIM,ERRMSG=@ERRMSG ");
sql.Append("where SID=@SID");
sqlList.Add(sql.ToString());
parameters = new DynamicParameters();
parameters.Add("@SID", cycrSid);
parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间
if (responseResult.Contains("message"))
{
result = Newtonsoft.Json.JsonConvert.DeserializeObject<SapInterfaceResult>(responseResult);
parameters.Add("@ERRMSG", result.message);//异常消息
if (result.success == true)
{
parameters.Add("@SYNFLG", "Y");//同步状态
}
else
{
parameters.Add("@SYNFLG", "E");//同步状态
}
}
else
{
if (!responseResult.Contains("500 Internal Server Error"))
{
parameters.Add("@ERRMSG", responseResult);//异常消息
parameters.Add("@SYNFLG", "E");//同步状态
}
}
parametersList.Add(parameters);
sql.Clear();
sql.Append("INSERT INTO dbo.OQ(SID,CRETIM,XMLCON,ACTFLG) ");
sql.Append(" VALUES(@SID,@CRETIM,@XMLCON,@ACTFLG) ");
sqlList.Add(sql.ToString());
parameters = new DynamicParameters();
parameters.Add("@SID", Guid.NewGuid().ToString().Replace("-", ""));
parameters.Add("@CRETIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
parameters.Add("@XMLCON", Newtonsoft.Json.JsonConvert.SerializeObject(sidList));
parameters.Add("@ACTFLG", 'N');
parametersList.Add(parameters);
this.ExecuteTransaction(sqlList, parametersList);
}
}
result.message = "执行同步完成";
return result;
}
}
}
}