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 : IWmsResultRepository, IDependency where T : IfBase { protected DapperDbContext dapperDbContext { get; set; } public WmsResultRepository(DapperDbContext _dapperDbContext) { dapperDbContext = _dapperDbContext; } /// /// 获取WMS执行结果 /// /// public List 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(query.ToString()).ToList(); } } public List 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(query.ToString()).ToList(); } } /// /// 将WMS执行结果传到SAP /// /// public SapInterfaceResult doResultsPush(List dataList, string tableName, string interfaceName) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { SapInterfaceResult result = new SapInterfaceResult(); List sqlList = new List(); List parametersList = new List(); 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(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 request = new Model.Result.SapInterfaceRequest(); 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(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 /// /// WMS把确认的盘点结果传到SAP /// /// public List 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(query.ToString()).ToList(); } } /// /// 添加WMS把确认的盘点结果传到SAP /// /// /// public SapInterfaceResult InsertInventoryResultsInfo(List cycrList) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { SapInterfaceResult result = new SapInterfaceResult(); List sqlList = new List(); List parametersList = new List(); 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(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 request = new Model.Result.SapInterfaceRequest(); 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(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; } } /// /// WMS把采购收货的质检判定结果(合格入库)信息传到SAP /// /// public List 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(sql.ToString()).ToList(); } } /// /// 添加WMS把采购收货的质检判定结果(合格入库)信息传到SAP /// /// /// public SapInterfaceResult InsertQualityInspectionResultsInfo(List wmsInqcs) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { SapInterfaceResult result = new SapInterfaceResult(); List sqlList = new List(); List parametersList = new List(); 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(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 request = new Model.Result.SapInterfaceRequest(); 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(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; } } /// /// WMS把退货过帐结果传到SAP /// /// public List 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(sql.ToString()).ToList(); } } /// /// 添加WMS把退货过帐结果传到SAP /// /// /// public SapInterfaceResult InsertSupplierReturnResultInfo(List 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(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 request = new Model.Result.SapInterfaceRequest(); 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(responseResult); if (result.success == true) { List sqlList = new List(); List parametersList = new List(); 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 sqlList = new List(); List parametersList = new List(); 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 sqlList = new List(); List parametersList = new List(); 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; } } } /// /// WMS把库存物料的转储(从SAP的一个库存地点到另一个库存地点,或报废出库,委外发运、零星出入库)执行结果传到SAP /// /// public List 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(sql.ToString()).ToList(); } } /// /// 添加WMS把库存物料的转储(从SAP的一个库存地点到另一个库存地点,或报废出库,委外发运、零星出入库)执行结果传到SAP /// /// /// public SapInterfaceResult InsertInventoryDumpResultInfo(List wmsMovrs) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { SapInterfaceResult result = new SapInterfaceResult(); List sqlList = new List(); List parametersList = new List(); 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(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 request = new Model.Result.SapInterfaceRequest(); 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(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; } } /// /// WMS将每次发运的信息传递给SAP,SAP用于创建交货单。 /// /// public List 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(sql.ToString()).ToList(); } } /// /// 添加WMS将每次发运的信息传递给SAP,SAP用于创建交货单。 /// /// /// public SapInterfaceResult InsertSalesAndShippingResultsInfo(List 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(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 request = new Model.Result.SapInterfaceRequest(); 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(responseResult); if (result.success == true) { List sqlList = new List(); List parametersList = new List(); 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 sqlList = new List(); List parametersList = new List(); 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 sqlList = new List(); List parametersList = new List(); 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; } } } /// /// WMS将每次发运的信息传递给SAP,SAP用于对交货单发货。 /// /// public List 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(sql.ToString()).ToList(); } } /// /// 添加WMS将每次发运的信息传递给SAP,SAP用于对交货单发货。 /// /// /// public SapInterfaceResult InsertSalesAndDeliveryPlanInfo(List wmsNjsis) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { SapInterfaceResult result = new SapInterfaceResult(); List sqlList = new List(); List parametersList = new List(); 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(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 request = new Model.Result.SapInterfaceRequest(); 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(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; } } /// /// WMS将每次发运的信息传递给SAP,SAP用于对交货单发货。 /// /// public List 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(sql.ToString()).ToList(); } } /// /// 添加MES发送生产汇报信息给SAP /// /// /// public SapInterfaceResult InsertProductionReportInfo(List mesMovtrns) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { SapInterfaceResult result = new SapInterfaceResult(); List sqlList = new List(); List parametersList = new List(); 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(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 request = new Model.Result.SapInterfaceRequest(); 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(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(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 request = new Model.Result.SapInterfaceRequest(); //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(responseResult); // if (result.success == true) // { // List sqlList = new List(); // List parametersList = new List(); // 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 sqlList = new List(); // List parametersList = new List(); // 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 sqlList = new List(); // List parametersList = new List(); // 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 /// /// 批量执行sql,带事务 /// /// /// /// /// public bool ExecuteTransaction(List sqlStrings, List 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 dataList, string tableName, string interfaceName) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { SapInterfaceResult result = new SapInterfaceResult(); List sqlList = new List(); List parametersList = new List(); 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(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 request = new Model.Result.SapInterfaceRequest(); 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(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; } } } }