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.Security.Cryptography; using System.Text.Json; using Estsh.Core.Models; using Newtonsoft.Json.Linq; using Estsh.Core.Model.EnumUtil; using Microsoft.Extensions.Primitives; using static Microsoft.EntityFrameworkCore.DbLoggerCategory; using Estsh.Core.Model.ExcelModel; namespace Estsh.Core.Wms.Repositories { public class InterfaceMasterRepository : BaseRepository, IInterfaceMasterRepository { public InterfaceMasterRepository(DapperDbContext _dapperDbContext) : base(_dapperDbContext) { } #region 物料 /// /// 获取物料主数据的数据 /// /// public List GetMaterialMasterInfo() { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { StringBuilder sql = new StringBuilder(1024); sql.Append("SELECT * FROM sap_pt (readpast) "); sql.Append("WHERE SYNFLG = 'N' and WERKS='3600'"); sql.Append("ORDER BY RECTIM "); return dbConn.Query(sql.ToString()).ToList(); } } //添加物料接口表到物料表 public bool InsertMaterialMasterInfo(List sapPts) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { SapPt sapPt = new SapPt(); for (int i = 0; i < sapPts.Count; i++) { List sqlList = new List(); List parametersList = new List(); sapPt = sapPts[i]; StringBuilder SqlStringBuilder = new StringBuilder(1024); DynamicParameters parameters = new DynamicParameters(); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append(" SELECT * from sys_part (nolock) WHERE part_no='" + sapPt.Matnr + "' and factory_code='" + sapPt.Werks + "'"); List sysParts = dbConn.Query(stringBuilder.ToString()).ToList(); if (sysParts.Count > 0) { StringBuilder factoryStringBuilder = new StringBuilder(1024); factoryStringBuilder.Append("select * from sys_factory (nolock) where factory_code='" + sapPt.Werks + "'");//工厂代码获取工厂ID SysFactory sysFactory = dbConn.Query(factoryStringBuilder.ToString()).FirstOrDefault(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE dbo.sys_part "); SqlStringBuilder.Append(" SET part_no = @partNo ,part_spec = @partSpec,part_spec2=@partSpec2,part_type=@partType "); SqlStringBuilder.Append(" ,unit=@unit ,default_box_qty = @defaultBoxQty "); SqlStringBuilder.Append(" ,part_abc = @partAbc ,part_group = @partGroup,option1=@option1 "); SqlStringBuilder.Append(" ,factory_id = @factoryId ,factory_code = @factoryCode "); SqlStringBuilder.Append(" ,enabled = @enabled ,update_userid = @updateUserid "); SqlStringBuilder.Append(" ,update_time = @updateTime "); SqlStringBuilder.Append(" WHERE part_no = @partNo AND factory_code = @factoryCode "); sqlList.Add(SqlStringBuilder.ToString()); parameters.Add("@partNo", sapPt.Matnr);//物料编码 parameters.Add("@partSpec", sapPt.Zzppmatnr);//物料简码 parameters.Add("@partSpec2", sapPt.Maktx);//物料描述 if (sapPt.Mtart == "Z010") { parameters.Add("@partType", "1");//成品 } else if (sapPt.Mtart == "Z020") { parameters.Add("@partType", "6");//半成品 } else if (sapPt.Mtart == "Z030") { parameters.Add("@partType", "0");//原材料 } else if (sapPt.Mtart == "Z040") { parameters.Add("@partType", "2");//转手件 } else if (sapPt.Mtart == "Z050") { parameters.Add("@partType", "3");//售后服务件 } else if (sapPt.Mtart == "Z060") { parameters.Add("@partType", "4");//支给件 } else if (sapPt.Mtart == "Z090") { parameters.Add("@partType", "5");//间接物料 } else { parameters.Add("@partType", "0");//其他 } parameters.Add("@unit", sapPt.Meins);//基本单位 parameters.Add("@defaultBoxQty", sapPt.Bstrf);//最小包装数量 parameters.Add("@partAbc", sapPt.Maabc);//分类(ABCDE) parameters.Add("@partGroup", sapPt.Wgbez);//物料组描述 parameters.Add("@option1", sapPt.Spart);//产品组 parameters.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", sapPt.Werks);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@updateUserid", 0);//更新人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//更新日期 parametersList.Add(parameters); } else { StringBuilder factoryStringBuilder = new StringBuilder(1024); factoryStringBuilder.Append("select * from sys_factory (nolock) where factory_code='" + sapPt.Werks + "'");//工厂代码获取工厂ID SysFactory sysFactory = dbConn.Query(factoryStringBuilder.ToString()).FirstOrDefault(); SqlStringBuilder.Append("INSERT INTO dbo.sys_part(part_no,part_spec,part_spec2,part_type,unit,default_box_qty,part_abc "); SqlStringBuilder.Append(" ,part_group,option1,factory_id,factory_code,enabled,create_userid,create_time) "); SqlStringBuilder.Append(" VALUES(@partNo,@partSpec,@partSpec2,@partType,@unit,@defaultBoxQty,@partAbc,@partGroup,@option1,@factoryId "); SqlStringBuilder.Append(" ,@factoryCode,@enabled,@createUserid,@createTime) "); sqlList.Add(SqlStringBuilder.ToString()); parameters.Add("@partNo", sapPt.Matnr);//物料编码 parameters.Add("@partSpec", sapPt.Zzppmatnr);//物料简码 parameters.Add("@partSpec2", sapPt.Maktx);//物料描述 if (sapPt.Mtart == "Z010") { parameters.Add("@partType", "1");//成品 } else if (sapPt.Mtart == "Z020") { parameters.Add("@partType", "6");//半成品 } else if (sapPt.Mtart == "Z030") { parameters.Add("@partType", "0");//原材料 } else if (sapPt.Mtart == "Z040") { parameters.Add("@partType", "2");//转手件 } else if (sapPt.Mtart == "Z050") { parameters.Add("@partType", "3");//售后服务件 } else if (sapPt.Mtart == "Z060") { parameters.Add("@partType", "4");//支给件 } else if (sapPt.Mtart == "Z090") { parameters.Add("@partType", "5");//间接物料 } else { parameters.Add("@partType", "0");//其他 } parameters.Add("@partSpec2", sapPt.Maktx);//物料描述 parameters.Add("@unit", sapPt.Meins);//基本单位 parameters.Add("@defaultBoxQty", sapPt.Bstrf);//最小包装数量 parameters.Add("@partAbc", sapPt.Maabc);//分类(ABCDE) parameters.Add("@partGroup", sapPt.Wgbez);//物料组描述 parameters.Add("@option1", sapPt.Spart);//产品组 parameters.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", sapPt.Werks);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@createUserid", 0);//创建人 parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parametersList.Add(parameters); } SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_PT set SYNFLG='Y',SYNTIM=@SYNTIM where GUID=@GUID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@GUID", sapPt.Guid);//ID parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); bool staResult = ExecuteTransaction(sqlList, parametersList); if (staResult == false) { sqlList = new List(); parametersList = new List(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_PT set SYNFLG='E',ERRMSG=@ERRMSG,SYNTIM=@SYNTIM where GUID=@GUID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@GUID", sapPt.Guid);//ID parameters.Add("@ERRMSG", "同步错误,请检查接口数据!");//错误 parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); ExecuteTransaction(sqlList, parametersList); return false; } } return true; } } /// /// 获取供应商基本信息 /// /// public List GetSupplierMasterInfo() { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { StringBuilder sql = new StringBuilder(1024); sql.Append("SELECT * FROM sap_su (readpast) "); sql.Append("WHERE SYNFLG = 'N' "); sql.Append("ORDER BY RECTIM "); return dbConn.Query(sql.ToString()).ToList(); } } /// /// 添加供应商接口表到供应商表 /// /// /// public bool InsertSupplierMasterInfo(List sapSus) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { SapSu sapSu = new SapSu(); StringBuilder factoryStringBuilder = new StringBuilder(1024); factoryStringBuilder.Append("select * from sys_factory (nolock) where enabled='Y'");//工厂代码获取工厂ID List sysFactory = dbConn.Query(factoryStringBuilder.ToString()).ToList(); for (int k = 0; k < sysFactory.Count; k++) { StringBuilder SqlStringBuilder = new StringBuilder(1024); DynamicParameters parameters = new DynamicParameters(); for (int i = 0; i < sapSus.Count; i++) { List sqlList = new List(); List parametersList = new List(); sapSu = sapSus[i]; StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append(" SELECT * from sys_vendor (nolock) WHERE vendor_code='" + sapSu.Lifnr + "' AND factory_code = '" + sysFactory[k].FactoryCode + "' "); List sysVendors = dbConn.Query(stringBuilder.ToString()).ToList(); if (sysVendors.Count > 0) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append(" UPDATE dbo.sys_vendor "); SqlStringBuilder.Append(" SET vendor_code = @vendorCode ,vendor_name = @vendorName ,vendor_tel = @vendorTel "); SqlStringBuilder.Append(" ,vendor_addr = @vendorAddr ,vendor_mail = @vendorMail ,factory_id = @factoryId "); SqlStringBuilder.Append(" ,factory_code = @factoryCode ,enabled = @enabled ,update_userid = @updateUserid "); SqlStringBuilder.Append(" ,update_time = @updateTime "); SqlStringBuilder.Append(" WHERE vendor_code = @vendorCode AND factory_code = @factoryCode "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@vendorCode", sapSu.Lifnr);//物料编码 parameters.Add("@vendorName", sapSu.Name1);//物料描述 parameters.Add("@vendorAddr", sapSu.Stras);//供应商地址 parameters.Add("@vendorTel", sapSu.Telf1);//联系电话 parameters.Add("@vendorMail", sapSu.Pstl2);//邮箱 parameters.Add("@factoryId", sysFactory[k].FactoryId);//工厂ID parameters.Add("@factoryCode", sysFactory[k].FactoryCode);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@updateUserid", 0);//更新人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//更新日期 parametersList.Add(parameters); } else { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.sys_vendor(vendor_code,vendor_name,vendor_tel,vendor_addr "); SqlStringBuilder.Append(" ,vendor_mail,factory_id,factory_code,enabled,create_userid,create_time) "); SqlStringBuilder.Append(" VALUES(@vendorCode,@vendorName,@vendorTel,@vendorAddr "); SqlStringBuilder.Append(" ,@vendorMail,@factoryId,@factoryCode,@enabled,@createUserid,@createTime) "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@vendorCode", sapSu.Lifnr);//物料编码 parameters.Add("@vendorName", sapSu.Name1);//物料描述 parameters.Add("@vendorAddr", sapSu.Stras);//供应商地址 parameters.Add("@vendorTel", sapSu.Telf1);//联系电话 parameters.Add("@vendorMail", sapSu.Pstl2);//邮箱 parameters.Add("@factoryId", sysFactory[k].FactoryId);//工厂ID parameters.Add("@factoryCode", sysFactory[k].FactoryCode);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@createUserid", 0);//创建人 parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parametersList.Add(parameters); } SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_SU set SYNFLG='Y',SYNTIM=@SYNTIM where GUID=@GUID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@GUID", sapSu.Guid);//ID parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); bool staResult = ExecuteTransaction(sqlList, parametersList); if (staResult == false) { sqlList = new List(); parametersList = new List(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_SU set SYNFLG='E',ERRMSG=@ERRMSG,SYNTIM=@SYNTIM where GUID=@GUID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@GUID", sapSu.Guid);//ID parameters.Add("@ERRMSG", "同步错误,请检查接口数据!");//错误 parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); ExecuteTransaction(sqlList, parametersList); return false; } } } return true; } } /// /// 获取客户基本信息 /// /// public List GetCustomerMasterInfo() { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { StringBuilder sql = new StringBuilder(1024); sql.Append("SELECT * FROM sap_cu (readpast) "); sql.Append("WHERE SYNFLG = 'N' "); sql.Append("ORDER BY RECTIM "); return dbConn.Query(sql.ToString()).ToList(); } } /// /// 添加客户接口表到供应商表 /// /// /// public bool InsertCustomerMasterInfo(List sapCus) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { SapCu sapCu = new SapCu(); StringBuilder factoryStringBuilder = new StringBuilder(1024); factoryStringBuilder.Append("select * from sys_factory (nolock) where enabled='Y'");//工厂代码获取工厂ID List sysFactory = dbConn.Query(factoryStringBuilder.ToString()).ToList(); for (int k = 0; k < sysFactory.Count; k++) { StringBuilder SqlStringBuilder = new StringBuilder(1024); DynamicParameters parameters = new DynamicParameters(); for (int i = 0; i < sapCus.Count; i++) { List sqlList = new List(); List parametersList = new List(); sapCu = sapCus[i]; StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append(" SELECT * from sys_customer (nolock) WHERE customer_code='" + sapCu.Kunnr + "' AND factory_code = '" + sysFactory[k].FactoryCode + "' "); List sysCustomers = dbConn.Query(stringBuilder.ToString()).ToList(); if (sysCustomers.Count > 0) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE dbo.sys_customer "); SqlStringBuilder.Append(" SET customer_code = @customerCode ,customer_name = @customerName "); SqlStringBuilder.Append(" ,customer_tel = @customerTel ,customer_addr = @customerAddr "); SqlStringBuilder.Append(" ,factory_id = @factoryId ,factory_code = @factoryCode "); SqlStringBuilder.Append(" ,enabled = @enabled ,update_userid = @updateUserid "); SqlStringBuilder.Append(" ,update_time = @updateTime "); SqlStringBuilder.Append(" WHERE customer_code = @customerCode AND factory_code = @factoryCode "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@customerCode", sapCu.Kunnr);//客户编号 parameters.Add("@customerName", sapCu.Name1);//客户名称 parameters.Add("@customerAddr", sapCu.Stras);//客户地址 parameters.Add("@customerTel", sapCu.Telf1);//联系电话 parameters.Add("@factoryId", sysFactory[k].FactoryId);//工厂ID parameters.Add("@factoryCode", sysFactory[k].FactoryCode);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@updateUserid", 0);//更新人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//更新日期 parametersList.Add(parameters); } else { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.sys_customer(customer_code,customer_name,customer_tel,customer_addr "); SqlStringBuilder.Append(" ,factory_id,factory_code,enabled,create_userid,create_time) "); SqlStringBuilder.Append(" VALUES(@customerCode,@customerName,@customerTel,@customerAddr "); SqlStringBuilder.Append(" ,@factoryId,@factoryCode,@enabled,@createUserid,@createTime) "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@customerCode", sapCu.Kunnr);//客户编号 parameters.Add("@customerName", sapCu.Name1);//客户名称 parameters.Add("@customerAddr", sapCu.Stras);//客户地址 parameters.Add("@customerTel", sapCu.Telf1);//联系电话 parameters.Add("@factoryId", sysFactory[k].FactoryId);//工厂ID parameters.Add("@factoryCode", sysFactory[k].FactoryCode);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@createUserid", 0);//创建人 parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parametersList.Add(parameters); } SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_CU set SYNFLG='Y',SYNTIM=@SYNTIM where GUID=@GUID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@GUID", sapCu.Guid);//ID parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); bool staResult = ExecuteTransaction(sqlList, parametersList); if (staResult == false) { sqlList = new List(); parametersList = new List(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_CU set SYNFLG='E',ERRMSG=@ERRMSG,SYNTIM=@SYNTIM where GUID=@GUID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@GUID", sapCu.Guid);//ID parameters.Add("@ERRMSG", "同步错误,请检查接口数据!");//错误 parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); ExecuteTransaction(sqlList, parametersList); return false; } } } return true; } } /// /// 获取物料号与客户物料号对照信息 /// /// public List GetCustomerItemMasterInfo() { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { StringBuilder sql = new StringBuilder(1024); sql.Append("SELECT * FROM sap_ptcpt (readpast) "); sql.Append("WHERE SYNFLG = 'N' "); sql.Append("ORDER BY RECTIM "); return dbConn.Query(sql.ToString()).ToList(); } } /// /// 添加物料号与客户物料号对照信息 /// /// /// public bool InsertCustomerItemMasterInfo(List sapPtcpts) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { SapPtcpt sapPtcpt = new SapPtcpt(); StringBuilder factoryStringBuilder = new StringBuilder(1024); factoryStringBuilder.Append("select * from sys_factory (nolock) where enabled='Y'");//工厂代码获取工厂ID List sysFactory = dbConn.Query(factoryStringBuilder.ToString()).ToList(); for (int k = 0; k < sysFactory.Count; k++) { StringBuilder SqlStringBuilder = new StringBuilder(1024); DynamicParameters parameters = new DynamicParameters(); for (int i = 0; i < sapPtcpts.Count; i++) { List sqlList = new List(); List parametersList = new List(); sapPtcpt = sapPtcpts[i]; StringBuilder partNoStringBuilder = new StringBuilder(1024); partNoStringBuilder.Append("select * from sys_part (nolock) where part_no='" + sapPtcpt.Matnr + "' AND factory_code = '" + sysFactory[k].FactoryCode + "' ");//零件号ID List sysPart = dbConn.Query(partNoStringBuilder.ToString()).ToList(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("select * from sys_customer_part (nolock) where customer_code='" + sapPtcpt.Kunnr + "' AND part_no='" + sapPtcpt.Matnr + "'"); List customerParts = dbConn.Query(SqlStringBuilder.ToString()).ToList(); if (customerParts.Count > 0) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE dbo.sys_customer_part "); SqlStringBuilder.Append(" SET customer_id = @customerId,customer_code = @customerCode "); SqlStringBuilder.Append(" ,part_id = @partId,part_no = @partNo "); SqlStringBuilder.Append(" ,cust_part_no = @custPartNo,enabled = @enabled "); SqlStringBuilder.Append(" ,factory_id = @factoryId,factory_code = @factoryCode "); SqlStringBuilder.Append(" ,update_userid = @updateUserid,update_time = @updateTime "); SqlStringBuilder.Append(" WHERE customer_code=@customerCode AND part_no=@partNo AND factory_code = @factoryCode "); sqlList.Add(SqlStringBuilder.ToString()); StringBuilder customerStringBuilder = new StringBuilder(1024); customerStringBuilder.Append("select * from sys_customer (nolock) where customer_code='" + sapPtcpt.Kunnr + "'");//客户信息 List sysCustomers = dbConn.Query(customerStringBuilder.ToString()).ToList(); parameters = new DynamicParameters(); if (sysCustomers.Count == 0) { parameters.Add("@customerId", 0);//客户id } else { parameters.Add("@customerId", sysCustomers[0].CustomerId);//客户id } parameters.Add("@customerCode", sapPtcpt.Kunnr);//客户编码 if (sysPart.Count == 0) { parameters.Add("@partId", 0);//物料ID } else { parameters.Add("@partId", sysPart[0].PartId);//物料ID } parameters.Add("@partNo", sapPtcpt.Matnr);//物料代码 parameters.Add("@custPartNo", sapPtcpt.Kdmat);//客户零件号 parameters.Add("@factoryId", sysFactory[k].FactoryId);//工厂ID parameters.Add("@factoryCode", sysFactory[k].FactoryCode);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@updateUserid", 0);//修改人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//修改日期 parametersList.Add(parameters); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_PTCPT set SYNFLG='Y',SYNTIM=@SYNTIM where GUID=@GUID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@GUID", sapPtcpt.Guid);//ID parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); } else { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.sys_customer_part(customer_id,customer_code,part_id,part_no "); SqlStringBuilder.Append(" ,cust_part_no,factory_id,factory_code,enabled,create_userid,create_time) "); SqlStringBuilder.Append(" VALUES(@customerId,@customerCode,@partId,@partNo,@custPartNo,@factoryId,@factoryCode,@enabled,@createUserid,@createTime) "); sqlList.Add(SqlStringBuilder.ToString()); StringBuilder customerStringBuilder = new StringBuilder(1024); customerStringBuilder.Append("select * from sys_customer (nolock) where customer_code='" + sapPtcpt.Kunnr + "'");//客户信息 List sysCustomers = dbConn.Query(customerStringBuilder.ToString()).ToList(); parameters = new DynamicParameters(); if (sysCustomers.Count == 0) { parameters.Add("@customerId", 0);//客户id } else { parameters.Add("@customerId", sysCustomers[0].CustomerId);//客户id } parameters.Add("@customerCode", sapPtcpt.Kunnr);//客户编码 if (sysPart.Count == 0) { parameters.Add("@partId", 0);//物料ID } else { parameters.Add("@partId", sysPart[0].PartId);//物料ID } parameters.Add("@partNo", sapPtcpt.Matnr);//物料代码 parameters.Add("@custPartNo", sapPtcpt.Kdmat);//客户零件号 parameters.Add("@factoryId", sysFactory[k].FactoryId);//工厂ID parameters.Add("@factoryCode", sysFactory[k].FactoryCode);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@createUserid", 0);//创建人 parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parametersList.Add(parameters); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_PTCPT set SYNFLG='Y',SYNTIM=@SYNTIM where GUID=@GUID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@GUID", sapPtcpt.Guid);//ID parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); } bool staResult = ExecuteTransaction(sqlList, parametersList); if (staResult == false) { sqlList = new List(); parametersList = new List(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_PTCPT set SYNFLG='E',ERRMSG=@ERRMSG,SYNTIM=@SYNTIM where GUID=@GUID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@GUID", sapPtcpt.Guid);//ID parameters.Add("@ERRMSG", "同步错误,请检查接口数据!");//错误 parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); ExecuteTransaction(sqlList, parametersList); return false; } } } return true; } } /// /// 获取MBOM同步到WMS系统 /// /// public List GetBomMasterInfo() { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { StringBuilder sql = new StringBuilder(1024); sql.Append("SELECT * FROM sap_bom (readpast) "); sql.Append("WHERE SYNFLG = 'N' "); sql.Append("ORDER BY RECTIM "); return dbConn.Query(sql.ToString()).ToList(); } } /// /// 添加MBOM同步到WMS系统 /// /// /// public bool InsertBomMasterInfo(List sapBomsList) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { List sqlList = new List(); List parametersList = new List(); StringBuilder SqlStringBuilder = new StringBuilder(1024); DynamicParameters parameters = new DynamicParameters(); StringBuilder factoryStringBuilder = new StringBuilder(1024); factoryStringBuilder.Append("select * from sys_factory (nolock) where enabled='Y' ");//工厂代码获取工厂ID List sysFactorys = dbConn.Query(factoryStringBuilder.ToString()).ToList(); StringBuilder partNoStringBuilder = new StringBuilder(1024); partNoStringBuilder.Append("select * from sys_part (nolock) where enabled='Y' ");//零件号ID List sysParts = dbConn.Query(partNoStringBuilder.ToString()).ToList(); List sapBomsListPartno = sapBomsList.Select(a => a.Matnr).Distinct().ToList(); for (int i = 0; i < sapBomsListPartno.Count; i++) { List sapBoms = sapBomsList.Where(a => a.Matnr.Equals(sapBomsListPartno[i])).ToList(); SapBom sapBom = sapBoms[0]; string guidStr = Guid.NewGuid().ToString(); sqlList = new List(); parametersList = new List(); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append(" SELECT * from sys_bom (nolock) WHERE part_no='" + sapBom.Matnr + "'"); List boms = dbConn.Query(stringBuilder.ToString()).ToList(); if (boms.Count > 0) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE dbo.sys_bom "); SqlStringBuilder.Append(" SET part_id = @partId,part_no = @partNo,bom_type = @bomType "); SqlStringBuilder.Append(" ,unit = @unit,version = @version,remark = @remark "); SqlStringBuilder.Append(" ,start_ymd = @startYmd,end_ymd = @endYmd,factory_id = @factoryId "); SqlStringBuilder.Append(" ,factory_code = @factoryCode,enabled = @enabled,update_userid = @updateUserid "); SqlStringBuilder.Append(" ,update_time = @updateTime "); SqlStringBuilder.Append(" WHERE part_no = @partNo "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); var sysPart = sysParts.Where(a => a.PartNo == sapBom.Matnr).ToList(); if (sysPart.Count == 0) { parameters.Add("@partId", 0);//物料ID } else { parameters.Add("@partId", sysPart[0].PartId);//物料ID } var sysFactory = sysFactorys.Where(a => a.FactoryCode == sapBom.Werks).ToList(); parameters.Add("@partNo", sapBom.Matnr);//物料编码 parameters.Add("@bomType", MesEnumUtil.BomType.REPORT);//bom类型 默认回冲 parameters.Add("@unit", sapBom.Meins);//单位 parameters.Add("@version", sapBom.Aennr);//ECN号 parameters.Add("@remark", sapBom.Matnr);// parameters.Add("@startYmd", sapBom.Datuv);//生效日期 parameters.Add("@endYmd", sapBom.Datus);//失效日期 parameters.Add("@factoryId", sysFactory.Count == 0 ? 0 : sysFactorys[0].FactoryId);//工厂ID parameters.Add("@factoryCode", sapBom.Werks);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@updateUserid", 0);//更新人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//更新日期 parametersList.Add(parameters); if (this.ExecuteTransaction(sqlList, parametersList)) { //sqlList = new List(); //parametersList = new List(); //SqlStringBuilder = new StringBuilder(1024); //SqlStringBuilder.Append("select * from sys_bom (nolock) where part_no='" + sapBom.Matnr + "' "); //List sysBom = dbConn.Query(SqlStringBuilder.ToString()).ToList(); SqlStringBuilder = new StringBuilder(1024); //SqlStringBuilder.Append("select * from sys_bom_detail (nolock) where part_no='" + sapBom.Matnr + "' and item_part_no='" + sapBom.Idnrk + "' "); SqlStringBuilder.Append("select * from sys_bom_detail (nolock) where part_no='" + sapBom.Matnr + "' "); List sysBomDetailList = dbConn.Query(SqlStringBuilder.ToString()).ToList(); foreach (var sapBomDetail in sapBoms) { List sysBomDetails = sysBomDetailList.Where(a => a.ItemPartNo == sapBomDetail.Idnrk).ToList(); if (sysBomDetails.Count > 0) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE dbo.sys_bom_detail "); SqlStringBuilder.Append(" SET part_id = @partId,part_no = @partNo "); SqlStringBuilder.Append(" ,unit = @unit,qty = @qty "); SqlStringBuilder.Append(" ,item_part_id = @itemPartId,item_part_no = @itemPartNo "); SqlStringBuilder.Append(" ,item_qty = @itemQty,item_unit = @itemUnit "); SqlStringBuilder.Append(" ,version = @version "); SqlStringBuilder.Append(" ,factory_id = @factoryId,factory_code = @factoryCode "); SqlStringBuilder.Append(" ,enabled = @enabled,update_userid = @updateUserid "); SqlStringBuilder.Append(" ,update_time = @updateTime "); SqlStringBuilder.Append(" ,vitual_part = @vitual_part "); SqlStringBuilder.Append(" WHERE part_no = @partNo and item_part_no=@itemPartNo "); sqlList.Add(SqlStringBuilder.ToString()); //partNoStringBuilder = new StringBuilder(1024); //partNoStringBuilder.Append("select * from sys_part (nolock) where part_no='" + sapBom.Idnrk + "'");//子零件号ID List sysPartItem = sysParts.Where(a => a.PartNo == sapBomDetail.Idnrk).ToList(); parameters = new DynamicParameters(); if (sysPart.Count == 0) { parameters.Add("@partId", 0);//物料Id } else { parameters.Add("@partId", sysPart[0].PartId);//物料Id } parameters.Add("@partNo", sapBomDetail.Matnr);//物料编码 parameters.Add("@vitual_part", sapBomDetail.Stlkz);//是否是虚阶 parameters.Add("@unit", sapBomDetail.Meins);//单位 parameters.Add("@qty", sapBomDetail.Bmeng);//单位用量 if (sysPartItem.Count == 0) { parameters.Add("@itemPartId", 0);//子件物料码Id } else { parameters.Add("@itemPartId", sysPartItem[0].PartId);//子件物料码Id } parameters.Add("@itemPartNo", sapBomDetail.Idnrk);//子件物料码 parameters.Add("@itemQty", sapBomDetail.Menge);//单位用量 parameters.Add("@itemUnit", sapBomDetail.Meins);//单位 parameters.Add("@version", sapBomDetail.Aennr);//ECN号 parameters.Add("@factoryId", sysFactory.Count == 0 ? 0 : sysFactory[0].FactoryId);//工厂ID parameters.Add("@factoryCode", sapBomDetail.Werks);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@updateUserid", 0);//修改人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//修改日期 parametersList.Add(parameters); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_BOM set SYNFLG='Y',SYNTIM=@SYNTIM where GUID=@GUID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@GUID", sapBomDetail.Guid);//ID parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); } else { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.sys_bom_detail(bom_id,part_id,part_no,unit,qty,item_part_id "); SqlStringBuilder.Append(" ,item_part_no,item_qty,item_unit,factory_id,factory_code,enabled "); SqlStringBuilder.Append(" ,create_userid,create_time,vitual_part) "); SqlStringBuilder.Append(" VALUES(@bomId,@partId,@partNo,@unit,@qty,@itemPartId,@itemPartNo,@itemQty "); SqlStringBuilder.Append(" ,@itemUnit,@factoryId,@factoryCode,@enabled,@createUserid,@createTime,@vitual_part) "); sqlList.Add(SqlStringBuilder.ToString()); //partNoStringBuilder = new StringBuilder(1024); //partNoStringBuilder.Append("select * from sys_part (nolock) where part_no='" + sapBom.Idnrk + "'");//子零件号ID List sysPartItem = sysParts.Where(a => a.PartNo == sapBomDetail.Idnrk).ToList(); parameters = new DynamicParameters(); parameters.Add("@bomId", boms[0].BomId);//BomId if (sysPart.Count == 0) { parameters.Add("@partId", 0);//物料Id } else { parameters.Add("@partId", sysPart[0].PartId);//物料Id } parameters.Add("@partNo", sapBomDetail.Matnr);//物料编码 parameters.Add("@vitual_part", sapBomDetail.Stlkz);//是否是虚阶 parameters.Add("@unit", sapBomDetail.Meins);//单位 parameters.Add("@qty", sapBomDetail.Bmeng);//单位用量 if (sysPartItem.Count == 0) { parameters.Add("@itemPartId", 0);//子件物料码Id } else { parameters.Add("@itemPartId", sysPartItem[0].PartId);//子件物料码Id } parameters.Add("@itemPartNo", sapBomDetail.Idnrk);//子件物料码 parameters.Add("@itemQty", sapBomDetail.Menge);//单位用量 parameters.Add("@itemUnit", sapBomDetail.Meins);//单位 parameters.Add("@factoryId", sysFactory.Count == 0 ? 0 : sysFactory[0].FactoryId);//工厂ID parameters.Add("@factoryCode", sapBomDetail.Werks);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@createUserid", 0);//创建人 parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parametersList.Add(parameters); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_BOM set SYNFLG='Y',SYNTIM=@SYNTIM where GUID=@GUID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@GUID", sapBomDetail.Guid);//ID parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); } } } else { sqlList = new List(); parametersList = new List(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_BOM set SYNFLG='E',ERRMSG=@ERRMSG,SYNTIM=@SYNTIM where GUID=@GUID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@GUID", sapBom.Guid);//ID parameters.Add("@ERRMSG", "同步错误,请检查接口数据!");//错误 parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); ExecuteTransaction(sqlList, parametersList); return false; } } else { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.sys_bom(part_id,part_no,bom_type,unit,version,remark,start_ymd "); SqlStringBuilder.Append(" ,end_ymd,factory_id,factory_code,enabled,create_userid,create_time,guid) "); SqlStringBuilder.Append(" VALUES(@partId,@partNo,@bomType,@unit,@version,@remark,@startYmd,@endYmd "); SqlStringBuilder.Append(" ,@factoryId,@factoryCode,@enabled,@createUserid,@createTime,@guid) "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); var sysPart = sysParts.Where(a => a.PartNo == sapBom.Matnr).ToList(); if (sysPart.Count == 0) { parameters.Add("@partId", 0);//物料ID } else { parameters.Add("@partId", sysPart[0].PartId);//物料ID } var sysFactory = sysFactorys.Where(a => a.FactoryCode == sapBom.Werks).ToList(); parameters.Add("@partNo", sapBom.Matnr);//物料编码 parameters.Add("@bomType", MesEnumUtil.BomType.REPORT);//bom类型 默认回冲 parameters.Add("@unit", sapBom.Meins);//单位 parameters.Add("@version", sapBom.Aennr);//ECN号 parameters.Add("@remark", sapBom.Matnr);// parameters.Add("@startYmd", sapBom.Datuv);//生效日期 parameters.Add("@endYmd", sapBom.Datus);//失效日期 parameters.Add("@factoryId", sysFactory.Count == 0 ? 0 : sysFactorys[0].FactoryId);//工厂ID parameters.Add("@factoryCode", sapBom.Werks);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@createUserid", 0);//创建人 parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parameters.Add("@guid", guidStr);//guid parametersList.Add(parameters); if (this.ExecuteTransaction(sqlList, parametersList)) { sqlList = new List(); parametersList = new List(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("select * from sys_bom (nolock) where part_no='" + sapBom.Matnr + "' "); List sysBom = dbConn.Query(SqlStringBuilder.ToString()).ToList(); foreach (var sapBomDetail in sapBoms) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.sys_bom_detail(bom_id,part_id,part_no,unit,qty,item_part_id "); SqlStringBuilder.Append(" ,item_part_no,item_qty,item_unit,factory_id,factory_code,enabled "); SqlStringBuilder.Append(" ,create_userid,create_time,vitual_part) "); SqlStringBuilder.Append(" VALUES(@bomId,@partId,@partNo,@unit,@qty,@itemPartId,@itemPartNo,@itemQty "); SqlStringBuilder.Append(" ,@itemUnit,@factoryId,@factoryCode,@enabled,@createUserid,@createTime,@vitual_part) "); sqlList.Add(SqlStringBuilder.ToString()); //partNoStringBuilder = new StringBuilder(1024); //partNoStringBuilder.Append("select * from sys_part (nolock) where part_no='" + sapBom.Idnrk + "'");//子零件号ID //List sysPartItem = dbConn.Query(partNoStringBuilder.ToString()).ToList(); List sysPartItem = sysParts.Where(a => a.PartNo == sapBomDetail.Idnrk).ToList(); parameters = new DynamicParameters(); parameters.Add("@bomId", sysBom[0].BomId);//BomId if (sysPart.Count == 0) { parameters.Add("@partId", 0);//物料Id } else { parameters.Add("@partId", sysPart[0].PartId);//物料Id } parameters.Add("@partNo", sapBomDetail.Matnr);//物料编码 parameters.Add("@vitual_part", sapBomDetail.Stlkz);//是否是虚阶 parameters.Add("@unit", sapBomDetail.Meins);//单位 parameters.Add("@qty", sapBomDetail.Bmeng);//单位用量 if (sysPartItem.Count == 0) { parameters.Add("@itemPartId", 0);//子件物料码Id } else { parameters.Add("@itemPartId", sysPartItem[0].PartId);//子件物料码Id } parameters.Add("@itemPartNo", sapBomDetail.Idnrk);//子件物料码 parameters.Add("@itemQty", sapBomDetail.Menge);//单位用量 parameters.Add("@itemUnit", sapBomDetail.Meins);//单位 parameters.Add("@factoryId", sysFactory.Count == 0 ? 0 : sysFactorys[0].FactoryId);//工厂ID parameters.Add("@factoryCode", sapBomDetail.Werks);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@createUserid", 0);//创建人 parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parametersList.Add(parameters); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_BOM set SYNFLG='Y',SYNTIM=@SYNTIM where GUID=@GUID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@GUID", sapBomDetail.Guid);//ID parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); } } else { sqlList = new List(); parametersList = new List(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_BOM set SYNFLG='E',ERRMSG=@ERRMSG,SYNTIM=@SYNTIM where GUID=@GUID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@GUID", sapBom.Guid);//ID parameters.Add("@ERRMSG", "同步错误,请检查接口数据!");//错误 parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); ExecuteTransaction(sqlList, parametersList); return false; } } bool staResult = ExecuteTransaction(sqlList, parametersList); if (staResult == false) { sqlList = new List(); parametersList = new List(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_BOM set SYNFLG='E',ERRMSG=@ERRMSG,SYNTIM=@SYNTIM where GUID=@GUID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@GUID", sapBom.Guid);//ID parameters.Add("@ERRMSG", "同步错误,请检查接口数据!");//错误 parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); ExecuteTransaction(sqlList, parametersList); return false; } } return true; } } #endregion #region 采购收货 /// /// SAP系统把ASN传递到WMS用于采购收货 /// /// public List GetASNDataInfo() { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { StringBuilder sql = new StringBuilder(1024); sql.Append("SELECT ZASNNO, COUNT(1), ZDATE,SID FROM sap_asn (readpast) "); sql.Append("WHERE SYNFLG = 'N' "); sql.Append("GROUP BY ZDATE,ZASNNO,SID "); sql.Append("ORDER BY ZDATE "); return dbConn.Query(sql.ToString()).ToList(); } } /// /// 添加SAP系统把ASN传递到WMS用于采购收货 /// /// /// public bool InsertASNDataInfo(List sapAsns) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); DynamicParameters parameters = new DynamicParameters(); List sqlList = new List(); List parametersList = new List(); StringBuilder factoryStringBuilder = new StringBuilder(1024); factoryStringBuilder.Append("select * from sys_factory (nolock) where enabled='Y'");//工厂 List sysFactoryAll = dbConn.Query(factoryStringBuilder.ToString()).ToList(); StringBuilder vendorStringBuilder = new StringBuilder(1024); vendorStringBuilder.Append("select * from sys_vendor (nolock) where enabled='Y'");//供应商信息 List sysVendorAll = dbConn.Query(vendorStringBuilder.ToString()).ToList(); StringBuilder partNoStringBuilder = new StringBuilder(1024); partNoStringBuilder.Append("select * from sys_part (nolock) where enabled='Y' ");//零件号 List sysPartAll = dbConn.Query(partNoStringBuilder.ToString()).ToList(); for (int s = 0; s < sapAsns.Count; s++) { sqlList.Clear(); parametersList.Clear(); SqlStringBuilder.Clear(); SqlStringBuilder.Append("SELECT * FROM sap_asn (nolock) "); SqlStringBuilder.Append("WHERE ZASNNO ='" + sapAsns[s].Zasnno + "' AND SID='" + sapAsns[s].Sid + "' "); List saps = dbConn.Query(SqlStringBuilder.ToString()).ToList(); SqlStringBuilder.Clear(); SqlStringBuilder.Append("SELECT * FROM sys_stock (nolock) "); SqlStringBuilder.Append("WHERE ref_order_no = '" + sapAsns[s].Zasnno + "'"); List stocksList = dbConn.Query(SqlStringBuilder.ToString()).ToList(); if (stocksList.Count > 0) { var stock = stocksList.FirstOrDefault(a => a.Status > (int)WmsEnumUtil.StockStatus.WAITING_RECEIVE); if (stock != null) { SqlStringBuilder.Clear(); SqlStringBuilder.Append("UPDATE sap_asn set SYNFLG = @synFlg,ERRMSG = @errMsg,SYNTIM = @synTim WHERE SYNFLG = 'N' "); SqlStringBuilder.Append("and ZASNNO = @zasnNo "); SqlStringBuilder.Append("and SID = @sid "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@synFlg", "Y"); parameters.Add("@errMsg", "此单据已收货处理,不允许修改"); parameters.Add("@synTim", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")); parameters.Add("@zasnNo", sapAsns[s].Zasnno); parameters.Add("@sid", sapAsns[s].Sid); parametersList.Add(parameters); SqlStringBuilder.Clear(); SqlStringBuilder.Append("UPDATE dbo.wms_purchase "); SqlStringBuilder.Append(" SET dock = @dock "); SqlStringBuilder.Append(" ,update_userid = @updateUserid,update_time = @updateTime "); SqlStringBuilder.Append(" WHERE order_no = @orderNo "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapAsns[s].Zasnno);//ASN号 parameters.Add("@dock", "sap update");//状态 已生成 parameters.Add("@updateUserid", 0);//更新人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//更新日期 parametersList.Add(parameters); this.ExecuteTransaction(sqlList, parametersList); continue; } } foreach (SapAsn sapAsn in saps) { if (sapAsn.Zstas != "X")//其他状态 { SysFactory sysFactory = sysFactoryAll.Where(a => a.FactoryCode == sapAsn.Werks).FirstOrDefault();//工厂 SysVendor sysVendor = sysVendorAll.Where(a => a.VendorCode == sapAsn.Lifnr).FirstOrDefault();//供应商信息 SysPart sysPart = sysPartAll.Where(a => a.PartNo == sapAsn.Matnr).FirstOrDefault();//零件号ID //SN int qty = Convert.ToInt32(sapAsn.ZcnNum); int vendorId = sysVendor == null ? 0 : sysVendor.VendorId;//供应商代码 string vendorCode = sysVendor == null ? "" : sysVendor.VendorCode;//供应商代码 int partId = 0; string partNo = ""; string partSpec = ""; decimal defaultBoxQty = 0; if (sysPart != null) { partId = sysPart.PartId; partNo = sysPart.PartNo; partSpec = sysPart.PartSpec; defaultBoxQty = Convert.ToInt32(sysPart.DefaultBoxQty == null ? 0 : sysPart.DefaultBoxQty); } string unit = sapAsn.Unit;//单位 string orderNo_New = sapAsn.Zasnno; string carNo_New = sapAsn.Ztxm; SysStock stock = stocksList.Where(a => a.CartonNo == sapAsn.Ztxm).FirstOrDefault(); if (stock != null) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE dbo.sys_stock "); SqlStringBuilder.Append(" SET vendor_id = @vendorId,vendor_code = @vendorCode "); SqlStringBuilder.Append(" ,part_id = @partId,part_no = @partNo,part_spec = @partSpec "); SqlStringBuilder.Append(" ,lot_no = @lotNo,qty = @qty,snp_qty = @snpQty "); SqlStringBuilder.Append(" ,erp_warehouse = @erpWarehouse ,ref_order_no = @refOrderNo "); SqlStringBuilder.Append(" ,unit = @unit,factory_id = @factoryId "); SqlStringBuilder.Append(" ,factory_code = @factoryCode,enabled = @enabled "); SqlStringBuilder.Append(" ,update_userid = @updateUserid,update_time = @updateTime "); SqlStringBuilder.Append(" WHERE carton_no = @cartonNo "); DynamicParameters param3 = new DynamicParameters(); param3.Add("@vendorId", vendorId); param3.Add("@vendorCode", vendorCode); param3.Add("@cartonNo", carNo_New); param3.Add("@partId", partId); param3.Add("@partNo", sapAsn.Matnr); param3.Add("@partSpec", partSpec); param3.Add("@lotNo", DateTime.Now.ToString("yyyyMMdd")); param3.Add("@qty", qty); param3.Add("@snpQty", defaultBoxQty); param3.Add("@erpWarehouse", sapAsn.Lgort);//库存地 param3.Add("@refOrderNo", orderNo_New); param3.Add("@unit", unit); param3.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID param3.Add("@factoryCode", sapAsn.Werks);//工厂代码 param3.Add("@updateUserid", 0);//修改人 param3.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//修改日期 param3.Add("@enabled", "Y"); sqlList.Add(SqlStringBuilder.ToString()); parametersList.Add(param3); } else { SqlStringBuilder.Remove(0, SqlStringBuilder.Length); SqlStringBuilder.Append("INSERT INTO dbo.sys_stock (vendor_id,vendor_code,carton_no,part_id,part_no,part_spec "); SqlStringBuilder.Append(" ,lot_no,status,qty,snp_qty "); SqlStringBuilder.Append(" ,erp_warehouse,ref_order_no,unit,factory_id "); SqlStringBuilder.Append(" ,factory_code,enabled,create_userid,create_time) "); SqlStringBuilder.Append(" VALUES (@vendorId,@vendorCode,@cartonNo,@partId,@partNo,@partSpec "); SqlStringBuilder.Append(" ,@lotNo,@status,@qty,@snpQty,@erpWarehouse,@refOrderNo,@unit"); SqlStringBuilder.Append(" ,@factoryId,@factoryCode,@enabled,@createUserid "); SqlStringBuilder.Append(" ,CONVERT(varchar(50), GETDATE(), 21)) "); DynamicParameters param3 = new DynamicParameters(); param3.Add("@vendorId", vendorId); param3.Add("@vendorCode", vendorCode); param3.Add("@cartonNo", carNo_New); param3.Add("@partId", partId); param3.Add("@partNo", sapAsn.Matnr); param3.Add("@partSpec", partSpec); param3.Add("@lotNo", DateTime.Now.ToString("yyyyMMdd")); param3.Add("@status", "20"); param3.Add("@qty", qty); param3.Add("@snpQty", defaultBoxQty); param3.Add("@erpWarehouse", sapAsn.Lgort);//库存地 param3.Add("@refOrderNo", orderNo_New); param3.Add("@unit", unit); param3.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID param3.Add("@factoryCode", sapAsn.Werks);//工厂代码 param3.Add("@enabled", "Y"); param3.Add("@createUserid", 0); sqlList.Add(SqlStringBuilder.ToString()); parametersList.Add(param3); } } else { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE dbo.sys_stock "); SqlStringBuilder.Append(" SET enabled = @enabled "); SqlStringBuilder.Append(" ,update_userid = @updateUserid,update_time = @updateTime "); SqlStringBuilder.Append(" WHERE carton_no = @cartonNo "); DynamicParameters param3 = new DynamicParameters(); string carNo_New = sapAsn.Ztxm; param3.Add("@enabled", "N"); param3.Add("@updateUserid", "0"); param3.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//修改日期 param3.Add("@cartonNo", carNo_New); sqlList.Add(SqlStringBuilder.ToString()); parametersList.Add(param3); } } #region 明细 SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT * FROM wms_purchase_detail (nolock) "); SqlStringBuilder.Append("WHERE order_no = '" + sapAsns[s].Zasnno + "'"); List wmsPurchaseDetailsList = dbConn.Query(SqlStringBuilder.ToString()).ToList(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT ZASNNO,LIFNR,ZRNUM,MATNR,SUM(ZCN_NUM) SumZcnNum,COUNT(1) BoxQty,UNIT,PSTYP,ZDATE,ZCJSJ,WERKS,LGORT FROM SAP_ASN (nolock) WHERE ZASNNO='" + sapAsns[s].Zasnno + "' AND SID ='" + sapAsns[s].Sid + "' AND Zstas='X' "); SqlStringBuilder.Append(" GROUP BY ZASNNO,LIFNR,ZRNUM,MATNR,UNIT,PSTYP,ZDATE,ZCJSJ,WERKS,LGORT "); List sapAsnsDetailsDel = dbConn.Query(SqlStringBuilder.ToString()).ToList(); //单据明细 foreach (SapAsn sapAsnsDetail in sapAsnsDetailsDel) { WmsPurchaseDetail wmsPurchaseDetailInfo = wmsPurchaseDetailsList.Where(a => a.OrderNo == sapAsnsDetail.Zasnno && a.PartNo == sapAsnsDetail.Matnr).FirstOrDefault(); if (wmsPurchaseDetailInfo != null) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE dbo.wms_purchase_detail "); SqlStringBuilder.Append(" SET part_no = @partNo,item_status=@itemStatus "); SqlStringBuilder.Append(" ,update_userid = @updateUserid,update_time = @updateTime "); SqlStringBuilder.Append(" WHERE order_no = @orderNo and part_no=@partNo "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapAsnsDetail.Zasnno);//ASN号 parameters.Add("@partNo", sapAsnsDetail.Matnr);//物料编码 parameters.Add("@itemStatus", (int)WmsEnumUtil.PurchaseOrderDetailStatus.CANCEL);//状态 已取消 parameters.Add("@updateUserid", 0);//创建人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parametersList.Add(parameters); } } SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT ZASNNO,LIFNR,ZRNUM,MATNR,SUM(ZCN_NUM) SumZcnNum,COUNT(1) BoxQty,UNIT,PSTYP,ZDATE,ZCJSJ,WERKS,LGORT FROM SAP_ASN (nolock) WHERE ZASNNO='" + sapAsns[s].Zasnno + "' AND SID ='" + sapAsns[s].Sid + "' AND Zstas!='X' "); SqlStringBuilder.Append(" GROUP BY ZASNNO,LIFNR,ZRNUM,MATNR,UNIT,PSTYP,ZDATE,ZCJSJ,WERKS,LGORT "); List sapAsnsDetails = dbConn.Query(SqlStringBuilder.ToString()).ToList(); //单据明细 foreach (SapAsn sapAsnsDetail in sapAsnsDetails) { WmsPurchaseDetail wmsPurchaseDetailInfo = wmsPurchaseDetailsList.Where(a => a.OrderNo == sapAsnsDetail.Zasnno && a.PartNo == sapAsnsDetail.Matnr).FirstOrDefault(); if (wmsPurchaseDetailInfo != null) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE dbo.wms_purchase_detail "); SqlStringBuilder.Append(" SET item_no = @itemNo,part_id = @partId "); SqlStringBuilder.Append(" ,part_no = @partNo,part_spec = @partSpec "); SqlStringBuilder.Append(" ,qty = @qty,box_qty=@boxQty,snp_qty=@snpQty,unit = @unit "); SqlStringBuilder.Append(" ,erp_warehouse = @erpWarehouse,item_status = @itemStatus "); SqlStringBuilder.Append(" ,factory_id = @factoryId,factory_code = @factoryCode "); SqlStringBuilder.Append(" ,enabled = @enabled,update_userid = @updateUserid "); SqlStringBuilder.Append(" ,update_time = @updateTime "); SqlStringBuilder.Append(" WHERE order_no = @orderNo and part_no=@partNo "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapAsnsDetail.Zasnno);//ASN号 parameters.Add("@itemNo", sapAsnsDetail.Zrnum);//ASN item List sysPart = sysPartAll.Where(a => a.PartNo == sapAsnsDetail.Matnr).ToList();//零件号ID if (sysPart.Count == 0) { parameters.Add("@partId", 0);//物料Id parameters.Add("@partSpec", "");//物料描述 parameters.Add("@snpQty", 0);//标准包装 } else { parameters.Add("@partId", sysPart[0].PartId);//物料Id parameters.Add("@partSpec", sysPart[0].PartSpec);//物料描述 parameters.Add("@snpQty", sysPart[0].DefaultBoxQty);//标准包装 } parameters.Add("@partNo", sapAsnsDetail.Matnr);//物料编码 parameters.Add("@boxQty", sapAsnsDetail.BoxQty);//包装数量 parameters.Add("@qty", sapAsnsDetail.SumZcnNum);//数量 parameters.Add("@unit", sapAsnsDetail.Unit);//单位 parameters.Add("@erpWarehouse", sapAsnsDetail.Lgort);//库存地 parameters.Add("@itemStatus", (int)WmsEnumUtil.PurchaseOrderDetailStatus.GENERATED);//状态 已生成 SysFactory sysFactory = sysFactoryAll.Where(a => a.FactoryCode == sapAsnsDetail.Werks).FirstOrDefault();//工厂 parameters.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", sapAsnsDetail.Werks);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@updateUserid", 0);//创建人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parametersList.Add(parameters); } else { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.wms_purchase_detail(order_no,item_no,part_id,part_no,part_spec,qty,rec_qty,box_qty,rec_box_qty,snp_qty"); SqlStringBuilder.Append(" ,unit,erp_warehouse,item_status,factory_id,factory_code "); SqlStringBuilder.Append(" ,enabled,create_userid,create_time) "); SqlStringBuilder.Append(" VALUES(@orderNo,@itemNo,@partId,@partNo,@partSpec,@qty,0,@boxQty,0,@snpQty "); SqlStringBuilder.Append(" ,@unit,@erpWarehouse,@itemStatus,@factoryId,@factoryCode,@enabled "); SqlStringBuilder.Append(" ,@createUserid,@createTime) "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapAsnsDetail.Zasnno);//ASN号 parameters.Add("@itemNo", sapAsnsDetail.Zrnum);//ASN item SysPart sysPart = sysPartAll.Where(a => a.PartNo == sapAsnsDetail.Matnr).FirstOrDefault();//零件号ID if (sysPart == null) { parameters.Add("@partId", 0);//物料Id parameters.Add("@partSpec", "");//物料描述 parameters.Add("@snpQty", 0);//标准包装 } else { parameters.Add("@partId", sysPart.PartId);//物料Id parameters.Add("@partSpec", sysPart.PartSpec);//物料描述 parameters.Add("@snpQty", sysPart.DefaultBoxQty);//标准包装 } parameters.Add("@partNo", sapAsnsDetail.Matnr);//物料编码 parameters.Add("@boxQty", sapAsnsDetail.BoxQty);//包装数量 parameters.Add("@qty", sapAsnsDetail.SumZcnNum);//数量 parameters.Add("@unit", sapAsnsDetail.Unit);//单位 parameters.Add("@erpWarehouse", sapAsnsDetail.Lgort);//库存地 parameters.Add("@itemStatus", (int)WmsEnumUtil.PurchaseOrderDetailStatus.GENERATED);//状态 已生成 SysFactory sysFactory = sysFactoryAll.Where(a => a.FactoryCode == sapAsnsDetail.Werks).FirstOrDefault();//工厂 parameters.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", sapAsnsDetail.Werks);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@createUserid", 0);//创建人 parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parametersList.Add(parameters); } } #endregion #region 主表 SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT * FROM wms_purchase (nolock) "); SqlStringBuilder.Append("WHERE order_no = '" + sapAsns[s].Zasnno + "'"); List wmsPurchasesList = dbConn.Query(SqlStringBuilder.ToString()).ToList(); string guidStr = Guid.NewGuid().ToString(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT ZASNNO,LIFNR,ZRNUM,MATNR,ZCN_NUM,UNIT,PSTYP,ZDATE,ZCJSJ,WERKS,LGORT FROM SAP_ASN (nolock) WHERE ZASNNO='" + sapAsns[s].Zasnno + "' AND SID ='" + sapAsns[s].Sid + "' AND ZSTAS='X' "); SapAsn sapAsnsmainDel = dbConn.Query(SqlStringBuilder.ToString()).FirstOrDefault(); if (wmsPurchasesList.Count > 0) { if (sapAsnsmainDel != null) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE dbo.wms_purchase "); SqlStringBuilder.Append(" SET order_status = @orderStatus "); SqlStringBuilder.Append(" ,update_userid = @updateUserid,update_time = @updateTime "); SqlStringBuilder.Append(" WHERE order_no = @orderNo "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapAsnsmainDel.Zasnno);//ASN号 parameters.Add("@orderStatus", 60);//状态 已生成 parameters.Add("@updateUserid", 0);//更新人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//更新日期 parametersList.Add(parameters); } } SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT ZASNNO,LIFNR,ZRNUM,MATNR,ZCN_NUM,UNIT,PSTYP,ZDATE,ZCJSJ,WERKS,LGORT FROM SAP_ASN (nolock) WHERE ZASNNO='" + sapAsns[s].Zasnno + "' AND SID ='" + sapAsns[s].Sid + "' AND ZSTAS!='X' "); SapAsn sapAsnsmain = dbConn.Query(SqlStringBuilder.ToString()).FirstOrDefault(); if (sapAsnsmain != null) { if (wmsPurchasesList.Count > 0) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE dbo.wms_purchase "); SqlStringBuilder.Append(" SET order_type = @orderType,order_status = @orderStatus "); SqlStringBuilder.Append(" ,vendor_id = @vendorId,vendor_code = @vendorCode,se_date = @seDate "); SqlStringBuilder.Append(" ,se_time = @seTime,factory_id = @factoryId,factory_code = @factoryCode "); SqlStringBuilder.Append(" ,enabled = @enabled,update_userid = @updateUserid,update_time = @updateTime,PSTYP=@PSTYP "); SqlStringBuilder.Append(" WHERE order_no = @orderNo "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapAsnsmain.Zasnno);//ASN号 parameters.Add("@orderType", 20);//类型 ASN parameters.Add("@orderStatus", 20);//状态 已生成 SysVendor sysVendor = sysVendorAll.Where(a => a.VendorCode == sapAsnsmain.Lifnr).FirstOrDefault();//供应商信息 parameters.Add("@vendorId", sysVendor == null ? 0 : sysVendor.VendorId);//供应商ID parameters.Add("@vendorCode", sapAsnsmain.Lifnr);//供应商代码 parameters.Add("@seDate", sapAsnsmain.Zdate);//计划交货日期 parameters.Add("@seTime", sapAsnsmain.Zcjsj);//计划交货时间 SysFactory sysFactory = sysFactoryAll.Where(a => a.FactoryCode == sapAsnsmain.Werks).FirstOrDefault();//工厂 parameters.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", sapAsnsmain.Werks);//工厂代码 parameters.Add("@PSTYP", sapAsnsmain.Pstyp);//采购标识0:标准,3:外协加工,2:寄售,1:限制,7:库存转存 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@updateUserid", 0);//更新人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//更新日期 parametersList.Add(parameters); } else { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.wms_purchase(order_no,order_type,order_status,vendor_id,vendor_code "); SqlStringBuilder.Append(" ,se_date,se_time,factory_id,factory_code,enabled,create_userid,create_time,guid,PSTYP) "); SqlStringBuilder.Append(" VALUES(@orderNo,@orderType,@orderStatus,@vendorId,@vendorCode,@seDate,@seTime "); SqlStringBuilder.Append(" ,@factoryId,@factoryCode,@enabled,@createUserid,@createTime,@guid,@PSTYP) "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapAsnsmain.Zasnno);//ASN号 parameters.Add("@orderType", 20);//类型 ASN parameters.Add("@orderStatus", 20);//状态 已生成 SysVendor sysVendor = sysVendorAll.Where(a => a.VendorCode == sapAsnsmain.Lifnr).FirstOrDefault();//供应商信息 parameters.Add("@vendorId", sysVendor == null ? 0 : sysVendor.VendorId);//供应商ID parameters.Add("@vendorCode", sapAsnsmain.Lifnr);//供应商代码 parameters.Add("@seDate", sapAsnsmain.Zdate);//计划交货日期 parameters.Add("@seTime", sapAsnsmain.Zcjsj);//计划交货时间 SysFactory sysFactory = sysFactoryAll.Where(a => a.FactoryCode == sapAsnsmain.Werks).FirstOrDefault();//工厂 parameters.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", sapAsnsmain.Werks);//工厂代码 parameters.Add("@PSTYP", sapAsnsmain.Pstyp);//采购标识0:标准,3:外协加工,2:寄售,1:限制,7:库存转存 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@createUserid", 0);//创建人 parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parameters.Add("@guid", guidStr);//guid parametersList.Add(parameters); } } #endregion SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_ASN set SYNFLG='Y',SYNTIM=@SYNTIM where Zasnno=@Zasnno and SID=@SID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@Zasnno", sapAsns[s].Zasnno);//Zasnno parameters.Add("@SID", sapAsns[s].Sid);//Sid parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); bool staResult = ExecuteTransaction(sqlList, parametersList); if (staResult == false) { sqlList = new List(); parametersList = new List(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_ASN set SYNFLG='E',ERRMSG=@ERRMSG,SYNTIM=@SYNTIM where ZASNNO=@Zasnno and SID=@SID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@Zasnno", sapAsns[s].Zasnno);//Zasnno parameters.Add("@SID", sapAsns[s].Sid);//Sid parameters.Add("@ERRMSG", "同步错误,请检查接口数据!");//错误 parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); ExecuteTransaction(sqlList, parametersList); return false; } } return true; } } /// /// 获取SAP系统把PO传递到WMS用于采购收货 /// /// public List GetDSPODataInfo() { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { StringBuilder sql = new StringBuilder(1024); sql.Append("SELECT EBELN, COUNT(1),ZDATE,SID FROM sap_dspo (readpast) "); sql.Append("WHERE SYNFLG = 'N' "); sql.Append("GROUP BY ZDATE,EBELN,SID "); sql.Append("ORDER BY ZDATE "); return dbConn.Query(sql.ToString()).ToList(); } } /// /// 添加SAP系统把PO传递到WMS用于采购收货 /// /// /// public bool InsertPODataInfo(List sapDspos) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { dbConn.Open(); StringBuilder SqlStringBuilder = new StringBuilder(1024); DynamicParameters parameters = new DynamicParameters(); StringBuilder factoryStringBuilder = new StringBuilder(1024); factoryStringBuilder.Append("select * from sys_factory (nolock) where enabled='Y'");//工厂 List sysFactoryAll = dbConn.Query(factoryStringBuilder.ToString()).ToList(); StringBuilder vendorStringBuilder = new StringBuilder(1024); vendorStringBuilder.Append("select * from sys_vendor (nolock) where enabled='Y'");//供应商信息 List sysVendorAll = dbConn.Query(vendorStringBuilder.ToString()).ToList(); StringBuilder partNoStringBuilder = new StringBuilder(1024); partNoStringBuilder.Append("select * from sys_part (nolock) where enabled='Y' ");//零件号 List sysPartAll = dbConn.Query(partNoStringBuilder.ToString()).ToList(); for (int s = 0; s < sapDspos.Count; s++) { List sqlList = new List(); List parametersList = new List(); #region 明细 SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT * FROM wms_purchase_detail (nolock) "); SqlStringBuilder.Append("WHERE order_no = '" + sapDspos[s].Ebeln + "'"); List wmsPurchaseDetailsList = dbConn.Query(SqlStringBuilder.ToString()).ToList(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT EBELN,LIFNR,EVRTP,MATNR,SUM(ZDEV_NUM) SumZdevNum,COUNT(1) BoxQty,UNIT,PSTYP,ZDATE,ZCJSJ,WERKS,LGORT FROM sap_dspo (nolock) WHERE EBELN='" + sapDspos[s].Ebeln + "' AND SID ='" + sapDspos[s].Sid + "' AND Zstas='X' "); SqlStringBuilder.Append(" GROUP BY EBELN,LIFNR,EVRTP,MATNR,UNIT,PSTYP,ZDATE,ZCJSJ,WERKS,LGORT "); List sapDsposDetailsDel = dbConn.Query(SqlStringBuilder.ToString()).ToList(); //单据明细 foreach (SapDspo sapDsposDetail in sapDsposDetailsDel) { WmsPurchaseDetail wmsPurchaseDetailInfo = wmsPurchaseDetailsList.Where(a => a.OrderNo == sapDsposDetail.Ebeln && a.PartNo == sapDsposDetail.Matnr).FirstOrDefault(); if (wmsPurchaseDetailInfo != null) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE dbo.wms_purchase_detail "); SqlStringBuilder.Append(" SET part_no = @partNo,item_status=@itemStatus,qty = @qty,box_qty=@boxQty "); SqlStringBuilder.Append(" ,update_userid = @updateUserid,update_time = @updateTime "); SqlStringBuilder.Append(" WHERE order_no = @orderNo and part_no=@partNo "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapDsposDetail.Ebeln);//PO号 parameters.Add("@partNo", sapDsposDetail.Matnr);//物料编码 parameters.Add("@qty", 0);//物料编码 parameters.Add("@boxQty", 0);//物料编码 parameters.Add("@itemStatus", (int)WmsEnumUtil.PurchaseOrderDetailStatus.COMPLETED);//状态 已完成 parameters.Add("@updateUserid", 0);//创建人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parametersList.Add(parameters); } } SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT EBELN,LIFNR,EVRTP,MATNR,SUM(ZDEV_NUM) SumZdevNum,COUNT(1) BoxQty,UNIT,PSTYP,ZDATE,ZCJSJ,WERKS,LGORT FROM sap_dspo (nolock) WHERE EBELN='" + sapDspos[s].Ebeln + "' AND SID ='" + sapDspos[s].Sid + "' AND Zstas!='X' "); SqlStringBuilder.Append(" GROUP BY EBELN,LIFNR,EVRTP,MATNR,UNIT,PSTYP,ZDATE,ZCJSJ,WERKS,LGORT "); List sapDsposDetails = dbConn.Query(SqlStringBuilder.ToString()).ToList(); //单据明细 foreach (SapDspo sapDsposDetail in sapDsposDetails) { WmsPurchaseDetail wmsPurchaseDetailInfo = wmsPurchaseDetailsList.Where(a => a.OrderNo == sapDsposDetail.Ebeln && a.PartNo == sapDsposDetail.Matnr).FirstOrDefault(); if (wmsPurchaseDetailInfo != null) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE dbo.wms_purchase_detail "); SqlStringBuilder.Append(" SET item_no = @itemNo,part_id = @partId "); SqlStringBuilder.Append(" ,part_no = @partNo,part_spec = @partSpec "); SqlStringBuilder.Append(" ,qty = @qty,box_qty=@boxQty,snp_qty=@snpQty,unit = @unit "); SqlStringBuilder.Append(" ,erp_warehouse = @erpWarehouse,item_status = @itemStatus "); SqlStringBuilder.Append(" ,factory_id = @factoryId,factory_code = @factoryCode "); SqlStringBuilder.Append(" ,enabled = @enabled,update_userid = @updateUserid "); SqlStringBuilder.Append(" ,update_time = @updateTime "); SqlStringBuilder.Append(" WHERE order_no = @orderNo and part_no=@partNo "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapDsposDetail.Ebeln);//PO号 parameters.Add("@itemNo", sapDsposDetail.Evrtp);//PO item List sysPart = sysPartAll.Where(a => a.PartNo == sapDsposDetail.Matnr).ToList();//零件号ID if (sysPart.Count == 0) { parameters.Add("@partId", 0);//物料Id parameters.Add("@partSpec", "");//物料描述 parameters.Add("@snpQty", 0);//标准包装 } else { parameters.Add("@partId", sysPart[0].PartId);//物料Id parameters.Add("@partSpec", sysPart[0].PartSpec);//物料描述 parameters.Add("@snpQty", sysPart[0].DefaultBoxQty);//标准包装 } parameters.Add("@partNo", sapDsposDetail.Matnr);//物料编码 parameters.Add("@boxQty", sapDsposDetail.BoxQty);//包装数量 parameters.Add("@qty", sapDsposDetail.SumZdevNum);//数量 parameters.Add("@unit", sapDsposDetail.Unit);//单位 parameters.Add("@erpWarehouse", sapDsposDetail.Lgort);//库存地 parameters.Add("@itemStatus", (int)WmsEnumUtil.PurchaseOrderDetailStatus.GENERATED);//状态 已生成 SysFactory sysFactory = sysFactoryAll.Where(a => a.FactoryCode == sapDsposDetail.Werks).FirstOrDefault();//工厂 parameters.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", sapDsposDetail.Werks);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@updateUserid", 0);//创建人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parametersList.Add(parameters); } else { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.wms_purchase_detail(order_no,item_no,part_id,part_no,part_spec,qty,rec_qty,box_qty,rec_box_qty,snp_qty"); SqlStringBuilder.Append(" ,unit,erp_warehouse,item_status,factory_id,factory_code "); SqlStringBuilder.Append(" ,enabled,create_userid,create_time) "); SqlStringBuilder.Append(" VALUES(@orderNo,@itemNo,@partId,@partNo,@partSpec,@qty,0,@boxQty,0,@snpQty "); SqlStringBuilder.Append(" ,@unit,@erpWarehouse,@itemStatus,@factoryId,@factoryCode,@enabled "); SqlStringBuilder.Append(" ,@createUserid,@createTime) "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapDsposDetail.Ebeln);//PO号 parameters.Add("@itemNo", sapDsposDetail.Evrtp);//PO item SysPart sysPart = sysPartAll.Where(a => a.PartNo == sapDsposDetail.Matnr).FirstOrDefault();//零件号ID if (sysPart == null) { parameters.Add("@partId", 0);//物料Id parameters.Add("@partSpec", "");//物料描述 parameters.Add("@snpQty", 0);//标准包装 } else { parameters.Add("@partId", sysPart.PartId);//物料Id parameters.Add("@partSpec", sysPart.PartSpec);//物料描述 parameters.Add("@snpQty", sysPart.DefaultBoxQty);//标准包装 } parameters.Add("@partNo", sapDsposDetail.Matnr);//物料编码 parameters.Add("@boxQty", sapDsposDetail.BoxQty);//包装数量 parameters.Add("@qty", sapDsposDetail.SumZdevNum);//数量 parameters.Add("@unit", sapDsposDetail.Unit);//单位 parameters.Add("@erpWarehouse", sapDsposDetail.Lgort);//库存地 parameters.Add("@itemStatus", (int)WmsEnumUtil.PurchaseOrderDetailStatus.GENERATED);//状态 已生成 SysFactory sysFactory = sysFactoryAll.Where(a => a.FactoryCode == sapDsposDetail.Werks).FirstOrDefault();//工厂 parameters.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", sapDsposDetail.Werks);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@createUserid", 0);//创建人 parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parametersList.Add(parameters); } } #endregion #region 主表 SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT * FROM wms_purchase (nolock) "); SqlStringBuilder.Append("WHERE order_no = '" + sapDspos[s].Ebeln + "'"); List wmsPurchasesList = dbConn.Query(SqlStringBuilder.ToString()).ToList(); string guidStr = Guid.NewGuid().ToString(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT EBELN,LIFNR,EVRTP,MATNR,ZDEV_NUM,UNIT,PSTYP,ZDATE,ZCJSJ,WERKS,LGORT FROM sap_dspo (nolock) WHERE EBELN='" + sapDspos[s].Ebeln + "' AND SID ='" + sapDspos[s].Sid + "' AND ZSTAS='X' "); SapDspo sapDsposmainDel = dbConn.Query(SqlStringBuilder.ToString()).FirstOrDefault(); if (wmsPurchasesList.Count > 0) { if (sapDsposmainDel != null) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE dbo.wms_purchase "); SqlStringBuilder.Append(" SET order_status = @orderStatus "); SqlStringBuilder.Append(" ,update_userid = @updateUserid,update_time = @updateTime "); SqlStringBuilder.Append(" WHERE order_no = @orderNo "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapDsposmainDel.Ebeln);//ASN号 parameters.Add("@orderStatus", 60);//状态 已生成 parameters.Add("@updateUserid", 0);//更新人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//更新日期 parametersList.Add(parameters); } } SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT EBELN,LIFNR,EVRTP,MATNR,ZDEV_NUM,UNIT,PSTYP,ZDATE,ZCJSJ,WERKS,LGORT FROM sap_dspo (nolock) WHERE EBELN='" + sapDspos[s].Ebeln + "' AND SID ='" + sapDspos[s].Sid + "' AND ZSTAS!='X' "); SapDspo sapDsposmain = dbConn.Query(SqlStringBuilder.ToString()).FirstOrDefault(); if (sapDsposmain != null) { if (wmsPurchasesList.Count > 0) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE dbo.wms_purchase "); SqlStringBuilder.Append(" SET order_type = @orderType,order_status = @orderStatus "); SqlStringBuilder.Append(" ,vendor_id = @vendorId,vendor_code = @vendorCode,se_date = @seDate "); SqlStringBuilder.Append(" ,se_time = @seTime,factory_id = @factoryId,factory_code = @factoryCode "); SqlStringBuilder.Append(" ,enabled = @enabled,update_userid = @updateUserid,update_time = @updateTime "); SqlStringBuilder.Append(" WHERE order_no = @orderNo "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapDsposmain.Ebeln);//PO号 parameters.Add("@orderType", 10);//类型 PO parameters.Add("@orderStatus", 10);//状态 创建 SysVendor sysVendor = sysVendorAll.Where(a => a.VendorCode == sapDsposmain.Lifnr).FirstOrDefault();//供应商信息 parameters.Add("@vendorId", sysVendor == null ? 0 : sysVendor.VendorId);//供应商ID parameters.Add("@vendorCode", sapDsposmain.Lifnr);//供应商代码 parameters.Add("@seDate", sapDsposmain.Zdate);//计划交货日期 parameters.Add("@seTime", sapDsposmain.Zcjsj);//计划交货时间 SysFactory sysFactory = sysFactoryAll.Where(a => a.FactoryCode == sapDsposmain.Werks).FirstOrDefault();//工厂 parameters.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", sapDsposmain.Werks);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@updateUserid", 0);//更新人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//更新日期 parametersList.Add(parameters); } else { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.wms_purchase(order_no,order_type,order_status,vendor_id,vendor_code "); SqlStringBuilder.Append(" ,se_date,se_time,factory_id,factory_code,enabled,create_userid,create_time,guid) "); SqlStringBuilder.Append(" VALUES(@orderNo,@orderType,@orderStatus,@vendorId,@vendorCode,@seDate,@seTime "); SqlStringBuilder.Append(" ,@factoryId,@factoryCode,@enabled,@createUserid,@createTime,@guid) "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapDsposmain.Ebeln);//PO号 parameters.Add("@orderType", 10);//类型 PO parameters.Add("@orderStatus", 10);//状态 创建 SysVendor sysVendor = sysVendorAll.Where(a => a.VendorCode == sapDsposmain.Lifnr).FirstOrDefault();//供应商信息 parameters.Add("@vendorId", sysVendor == null ? 0 : sysVendor.VendorId);//供应商ID parameters.Add("@vendorCode", sapDsposmain.Lifnr);//供应商代码 parameters.Add("@seDate", sapDsposmain.Zdate);//计划交货日期 parameters.Add("@seTime", sapDsposmain.Zcjsj);//计划交货时间 SysFactory sysFactory = sysFactoryAll.Where(a => a.FactoryCode == sapDsposmain.Werks).FirstOrDefault();//工厂 parameters.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", sapDsposmain.Werks);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@createUserid", 0);//创建人 parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parameters.Add("@guid", guidStr);//guid parametersList.Add(parameters); } } #endregion SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update sap_dspo set SYNFLG='Y',SYNTIM=@SYNTIM where Ebeln=@Ebeln and SID=@SID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@Ebeln", sapDspos[s].Ebeln);//Ebeln parameters.Add("@SID", sapDspos[s].Sid);//Sid parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); bool staResult = ExecuteTransaction(sqlList, parametersList); if (staResult == false) { sqlList = new List(); parametersList = new List(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update sap_dspo set SYNFLG='E',ERRMSG=@ERRMSG,SYNTIM=@SYNTIM where EBELN=@Ebeln and SID=@SID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@Ebeln", sapDspos[s].Ebeln);//Ebeln parameters.Add("@SID", sapDspos[s].Sid);//Sid parameters.Add("@ERRMSG", "同步错误,请检查接口数据!");//错误 parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); ExecuteTransaction(sqlList, parametersList); return false; } } return true; } } #endregion #region 移动 /// /// 获取SAP系统将一定期间内待发运交货单信息发布到WMS用于后续捡配发货 /// /// public List GetSalesAndDeliveryPlanInfo() { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { StringBuilder sql = new StringBuilder(1024); sql.Append("SELECT VBELN,COUNT(1),LFDAT,SID FROM sap_dn (readpast) "); sql.Append("WHERE SYNFLG = 'N' "); sql.Append("GROUP BY LFDAT,VBELN,SID "); sql.Append("ORDER BY LFDAT "); return dbConn.Query(sql.ToString()).ToList(); } } /// /// 添加SAP系统将一定期间内待发运交货单信息发布到WMS用于后续捡配发货 /// /// /// public bool InsertSalesAndDeliveryPlanInfo(List sapDns) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { StringBuilder stringBuilder = new StringBuilder(); StringBuilder SqlStringBuilder = new StringBuilder(1024); DynamicParameters parameters = new DynamicParameters(); StringBuilder factoryStringBuilder = new StringBuilder(1024); factoryStringBuilder.Append("select * from sys_factory (nolock) where enabled='Y'");//工厂 List sysFactoryAll = dbConn.Query(factoryStringBuilder.ToString()).ToList(); StringBuilder customerStringBuilder = new StringBuilder(1024); customerStringBuilder.Append("select * from sys_customer (nolock) where enabled='Y'");//客户信息 List sysCustomerAll = dbConn.Query(customerStringBuilder.ToString()).ToList(); StringBuilder partNoStringBuilder = new StringBuilder(1024); partNoStringBuilder.Append("select * from sys_part (nolock) where enabled='Y' ");//零件号 List sysPartAll = dbConn.Query(partNoStringBuilder.ToString()).ToList(); for (int s = 0; s < sapDns.Count; s++) { List sqlList = new List(); List parametersList = new List(); string guidStr = Guid.NewGuid().ToString(); #region 明细 SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT * FROM wms_outstock_detail (nolock) "); SqlStringBuilder.Append("WHERE order_no = '" + sapDns[s].Vbeln + "'"); List wmsOutstockDetailsList = dbConn.Query(SqlStringBuilder.ToString()).ToList(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT VBELN,POSNR,WERKS,MATNR,LGORT,LFDAT,KUNNR,MATNR,KDMAT,SUM(LFIMG) SumLfimg,MEINS FROM SAP_DN (nolock) WHERE VBELN='" + sapDns[s].Vbeln + "' AND SID ='" + sapDns[s].Sid + "' "); SqlStringBuilder.Append(" GROUP BY VBELN,POSNR,WERKS,MATNR,LGORT,LFDAT,KUNNR,MATNR,KDMAT,MEINS "); List sapDnsDetails = dbConn.Query(SqlStringBuilder.ToString()).ToList(); //单据明细 foreach (SapDn sapDnDetail in sapDnsDetails) { SysFactory sysFactory = sysFactoryAll.Where(a => a.FactoryCode == sapDnDetail.Werks).FirstOrDefault();//工厂 SysCustomer sysCustomers = sysCustomerAll.Where(a => a.CustomerCode == sapDnDetail.Kunnr).FirstOrDefault();//客户信息 SysPart sysPart = sysPartAll.Where(a => a.PartNo == sapDnDetail.Matnr).FirstOrDefault();//零件号ID WmsOutstockDetail wmsOutstockDetailInfo = wmsOutstockDetailsList.Where(a => a.OrderNo == sapDnDetail.Vbeln && a.PartNo == sapDnDetail.Matnr).FirstOrDefault(); if (wmsOutstockDetailInfo != null) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE dbo.wms_outstock_detail "); SqlStringBuilder.Append(" SET item_no = @itemNo,part_id = @partId "); SqlStringBuilder.Append(" ,part_no = @partNo,part_spec = @partSpec "); SqlStringBuilder.Append(" ,qty = @qty,unit = @unit "); SqlStringBuilder.Append(" ,plan_date = @planDate "); SqlStringBuilder.Append(" ,item_status = @itemStatus "); SqlStringBuilder.Append(" ,src_erp_warehouse = @srcErpWarehouse "); SqlStringBuilder.Append(" ,factory_id = @factoryId,factory_code = @factoryCode "); SqlStringBuilder.Append(" ,enabled = @enabled,update_userid = @updateUserid "); SqlStringBuilder.Append(" ,update_time = @updateTime "); SqlStringBuilder.Append(" WHERE order_no = @orderNo and part_no = @partNo "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapDnDetail.Vbeln);//销售交货单 parameters.Add("@itemNo", sapDnDetail.Posnr);//PO item if (sysPart == null) { parameters.Add("@partId", 0);//物料Id parameters.Add("@partSpec", "");//物料描述 } else { parameters.Add("@partId", sysPart.PartId);//物料Id parameters.Add("@partSpec", sysPart.PartSpec);//物料描述 } parameters.Add("@partNo", sapDnDetail.Matnr);//物料编码 parameters.Add("@qty", sapDnDetail.SumLfimg);//交货数量 parameters.Add("@unit", sapDnDetail.Meins);//单位 parameters.Add("@planDate", sapDnDetail.Lfdat);//计划交货日期 parameters.Add("@itemStatus", 10);//状态 parameters.Add("@srcErpWarehouse", sapDnDetail.Lgort);//库存地 parameters.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", sapDnDetail.Werks);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@updateUserid", 0);//修改人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//修改日期 parametersList.Add(parameters); } else { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.wms_outstock_detail(order_no,item_no,part_id,part_no,part_spec,qty,pick_qty,out_qty,unit "); SqlStringBuilder.Append(" ,plan_date,plan_time,item_status,src_warehouse_id,src_warehouse_name,src_zone_id,src_zone_name "); SqlStringBuilder.Append(" ,src_locate_id,src_locate_name,src_erp_warehouse,factory_id,factory_code,enabled "); SqlStringBuilder.Append(" ,create_userid,create_time) "); SqlStringBuilder.Append(" VALUES(@orderNo,@itemNo,@partId,@partNo,@partSpec,@qty,@pickQty,@outQty,@unit,@planDate "); SqlStringBuilder.Append(" ,'',@itemStatus,0,'',0,'' "); SqlStringBuilder.Append(" ,0,'',@srcErpWarehouse,@factoryId,@factoryCode,@enabled "); SqlStringBuilder.Append(" ,@createUserid,@createTime) "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapDnDetail.Vbeln);//销售交货单 parameters.Add("@itemNo", sapDnDetail.Posnr);//PO item if (sysPart == null) { parameters.Add("@partId", 0);//物料Id parameters.Add("@partSpec", "");//物料描述 } else { parameters.Add("@partId", sysPart.PartId);//物料Id parameters.Add("@partSpec", sysPart.PartSpec);//物料描述 } parameters.Add("@partNo", sapDnDetail.Matnr);//物料编码 parameters.Add("@qty", sapDnDetail.SumLfimg);//交货数量 parameters.Add("@pickQty", 0);// parameters.Add("@outQty", 0);// parameters.Add("@unit", sapDnDetail.Meins);//单位 parameters.Add("@planDate", sapDnDetail.Lfdat);//计划交货日期 parameters.Add("@itemStatus", 10);//状态 parameters.Add("@srcErpWarehouse", sapDnDetail.Lgort);//库存地 parameters.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", sapDnDetail.Werks);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@createUserid", 0);//创建人 parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parametersList.Add(parameters); } } #endregion SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT VBELN,POSNR,WERKS,MATNR,LGORT,LFDAT,KUNNR,MATNR,KDMAT,LFIMG,MEINS,ZVBELN FROM SAP_DN (nolock) WHERE VBELN='" + sapDns[s].Vbeln + "' AND SID ='" + sapDns[s].Sid + "'"); SapDn sapDnsmain = dbConn.Query(SqlStringBuilder.ToString()).FirstOrDefault(); if (sapDnsmain != null) { //主表 guidStr = Guid.NewGuid().ToString(); stringBuilder = new StringBuilder(); stringBuilder.Append(" SELECT * from wms_outstock (nolock) WHERE order_no='" + sapDnsmain.Vbeln + "' "); List wmsOutstocks = dbConn.Query(stringBuilder.ToString()).ToList(); if (wmsOutstocks.Count > 0) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE dbo.wms_outstock "); SqlStringBuilder.Append(" SET order_no = @orderNo,order_type = @orderType,order_status = @orderStatus "); SqlStringBuilder.Append(" ,factory_id = @factoryId,factory_code = @factoryCode "); SqlStringBuilder.Append(" ,enabled = @enabled,update_userid = @updateUserid,update_time = @updateTime "); SqlStringBuilder.Append(" WHERE ZVBELN = @ZVBELN "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapDnsmain.Vbeln);// parameters.Add("@ZVBELN", sapDnsmain.Zvbeln);//新增 SAP过账需求编号 parameters.Add("@orderType", (int)WmsEnumUtil.OutStockType.SALE_SHIPPING_NJIS);//类型 parameters.Add("@orderStatus", (int)WmsEnumUtil.MoveOrderStatus.CREATE);//状态 SysFactory sysFactory = sysFactoryAll.Where(a => a.FactoryCode == sapDnsmain.Werks).FirstOrDefault();//工厂 SysCustomer sysCustomers = sysCustomerAll.Where(a => a.CustomerCode == sapDnsmain.Kunnr).FirstOrDefault();//客户信息 parameters.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", sapDnsmain.Werks);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@updateUserid", 0);//更新人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//更新日期 parametersList.Add(parameters); } else { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.wms_outstock(order_no,order_type,order_status,vendor_id,vendor_code,customer_id "); SqlStringBuilder.Append(" ,customer_code,factory_id,factory_code,enabled,create_userid,create_time,guid,ZVBELN) "); SqlStringBuilder.Append(" VALUES(@orderNo,@orderType,@orderStatus,0,'',@customerId,@customerCode "); SqlStringBuilder.Append(" ,@factoryId,@factoryCode,@enabled,@createUserid,@createTime,@guid,@ZVBELN) "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapDnsmain.Vbeln);//销售交货单 parameters.Add("@ZVBELN", sapDnsmain.Zvbeln);//新增 SAP过账需求编号 parameters.Add("@orderType", (int)WmsEnumUtil.OutStockType.SALE_SHIPPING_NJIS);//类型 parameters.Add("@orderStatus", (int)WmsEnumUtil.MoveOrderStatus.CREATE);//状态 SysFactory sysFactory = sysFactoryAll.Where(a => a.FactoryCode == sapDnsmain.Werks).FirstOrDefault();//工厂 SysCustomer sysCustomers = sysCustomerAll.Where(a => a.CustomerCode == sapDnsmain.Kunnr).FirstOrDefault();//客户信息 parameters.Add("@customerId", sysCustomers == null ? 0 : sysCustomers.CustomerId);//客户ID parameters.Add("@customerCode", sapDnsmain.Kunnr);//客户代码 parameters.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", sapDnsmain.Werks);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@createUserid", 0);//创建人 parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parameters.Add("@guid", guidStr);//guid parametersList.Add(parameters); } } SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_DN set SYNFLG='Y',SYNTIM=@SYNTIM where VBELN=@VBELN and SID=@SID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@VBELN", sapDns[s].Vbeln);//单号 parameters.Add("@SID", sapDns[s].Sid);//ID parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); bool staResult = ExecuteTransaction(sqlList, parametersList); if (staResult == false) { sqlList = new List(); parametersList = new List(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_DN set SYNFLG='E',ERRMSG=@ERRMSG,SYNTIM=@SYNTIM where VBELN=@VBELN and SID=@SID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@VBELN", sapDns[s].Vbeln);//单号 parameters.Add("@SID", sapDns[s].Sid);//I parameters.Add("@ERRMSG", "同步错误,请检查接口数据!");//错误 parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); ExecuteTransaction(sqlList, parametersList); return false; } } return true; } } /// /// 获取SAP把物料的零星出(入)指令传到WMS /// /// public List GetSporadicEntryAndExitInfo() { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { StringBuilder sql = new StringBuilder(1024); sql.Append("SELECT * FROM SAP_MISCO (readpast) "); sql.Append("WHERE SYNFLG = 'N' "); sql.Append("ORDER BY ZINSTNO,ZACTION "); return dbConn.Query(sql.ToString()).ToList(); } } /// /// 添加SAP把物料的零星出(入)指令传到WMS /// /// /// public bool InsertSporadicEntryAndExitInfo(List sapMiscos) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { StringBuilder sqlString = new StringBuilder(1024); DynamicParameters parameters = new DynamicParameters(); List sqlList = new List(); List parametersList = new List(); sqlString.Clear(); sqlString.Append("select * from sys_factory (nolock) where enabled='Y'");//工厂 List sysFactoryAll = dbConn.Query(sqlString.ToString()).ToList(); var miscosOrderNos = sapMiscos.Select(a => new { a.Zinstno, a.Zaction }).Distinct().ToList(); foreach (var order in miscosOrderNos) { sqlList.Clear(); parametersList.Clear(); var miscoOrders = sapMiscos.Where(a => a.Zinstno.Equals(order.Zinstno) && a.Zaction.Equals(order.Zaction)).ToList(); sqlString.Clear(); sqlString.Append("select sp.* from sys_part sp (nolock) "); sqlString.Append(" join SAP_MISCO sm (nolock) on sp.part_no = sm.MATNR and sp.factory_code = sm.WERKS "); sqlString.Append("where sp.enabled='Y' "); sqlString.Append(" and sm.ZINSTNO = @orderNo "); sqlString.Append(" and sm.Zaction = @orderType "); var sysParts = dbConn.Query(sqlString.ToString(), new { orderNo = order.Zinstno, orderType = order.Zaction }).ToList(); if (sysParts == null || sysParts.Count != miscoOrders.Count) { this.UpdateSapMisco(dbConn, order.Zinstno, order.Zaction, "订单中有零件在系统中不存在"); continue; } if (WmsEnumUtil.SapMiscoZactionType.C00.ToString().Equals(order.Zaction) || WmsEnumUtil.SapMiscoZactionType.C02.ToString().Equals(order.Zaction) || WmsEnumUtil.SapMiscoZactionType.C04.ToString().Equals(order.Zaction)) { // 写出库单 sqlString.Clear(); sqlString.Append("SELECT * FROM wms_outstock_detail (nolock) "); sqlString.Append("WHERE order_no = @orderNo"); var outStockDetails = dbConn.Query(sqlString.ToString(), new { orderNo = order.Zinstno }).ToList(); var outStockDetail = outStockDetails.FirstOrDefault(a => a.ItemStatus > (int)WmsEnumUtil.MoveOrderDetailStatus.CREATE); if (outStockDetail != null) { this.UpdateSapMisco(dbConn, order.Zinstno, order.Zaction, "订单已开始执行,不允许修改"); continue; } var sysFactory = sysFactoryAll.FirstOrDefault(a => a.FactoryCode == miscoOrders[0].Werks); if (sysFactory == null) { this.UpdateSapMisco(dbConn, order.Zinstno, order.Zaction, "订单对应的工厂不存在"); continue; } foreach (var miscoOrder in miscoOrders) { var sysPart = sysParts.FirstOrDefault(a => a.PartNo == miscoOrder.Matnr); outStockDetail = outStockDetails.FirstOrDefault(a => a.PartNo == miscoOrder.Matnr); if (outStockDetail != null) { sqlString.Clear(); sqlString.Append("UPDATE dbo.wms_outstock_detail "); sqlString.Append(" SET qty = @qty "); sqlString.Append(" ,item_status = @itemStatus "); sqlString.Append(" ,src_erp_warehouse = @srcErpWarehouse "); sqlString.Append(" ,update_userid = @updateUserid "); sqlString.Append(" ,update_time = @updateTime "); sqlString.Append(" WHERE order_no = @orderNo and part_no = @partNo "); sqlList.Add(sqlString.ToString()); parameters = new DynamicParameters(); parameters.Add("@qty", miscoOrder.Erfmg);//数量 if (miscoOrder.Zzlzt.Equals("X")) { parameters.Add("@itemStatus", WmsEnumUtil.MoveOrderDetailStatus.CANCEL);//明细状态 } else { parameters.Add("@itemStatus", WmsEnumUtil.MoveOrderDetailStatus.CREATE);//明细状态 } parameters.Add("@srcErpWarehouse", miscoOrder.Lgort);//库存地 parameters.Add("@updateUserid", 0);//修改人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//修改日期 parameters.Add("@orderNo", miscoOrder.Zinstno);//单据号 parameters.Add("@partNo", miscoOrder.Matnr);//物料号 parametersList.Add(parameters); } else { sqlString.Clear(); sqlString.Append("INSERT INTO dbo.wms_outstock_detail(order_no,item_no,part_id,part_no,part_spec,qty,pick_qty,out_qty,unit "); sqlString.Append(" ,plan_date,plan_time,item_status,src_warehouse_id,src_warehouse_name,src_zone_id,src_zone_name "); sqlString.Append(" ,src_locate_id,src_locate_name,src_erp_warehouse,factory_id,factory_code,enabled "); sqlString.Append(" ,create_userid,create_time) "); sqlString.Append(" VALUES(@orderNo,@itemNo,@partId,@partNo,@partSpec,@qty,@pickQty,@outQty,@unit "); sqlString.Append(" ,@planDate,@planTime,@itemStatus,@srcWarehouseId,@srcWarehouseName,@srcZoneId,@srcZoneName "); sqlString.Append(" ,@srcLocateId,@srcLocateName,@srcErpWarehouse,@factoryId,@factoryCode,@enabled "); sqlString.Append(" ,@createUserid,@createTime) "); sqlList.Add(sqlString.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", miscoOrder.Zinstno);//销售交货单 parameters.Add("@itemNo", miscoOrder.Zeile);//PO item parameters.Add("@partId", sysPart.PartId);//物料Id parameters.Add("@partNo", miscoOrder.Matnr);//物料编码 parameters.Add("@partSpec", sysPart.PartSpec);//物料描述 parameters.Add("@qty", miscoOrder.Erfmg);//数量 parameters.Add("@pickQty", 0);// parameters.Add("@outQty", 0);// parameters.Add("@unit", miscoOrder.Erfme);//单位 parameters.Add("@planDate", DateTime.Now.ToString("yyyy-MM-dd"));//计划交货日期 parameters.Add("@planTime", "");//计划交货日期 parameters.Add("@itemStatus", 10);//状态 parameters.Add("@srcWarehouseId", 0);//仓库 parameters.Add("@srcWarehouseName", string.Empty);//仓库 parameters.Add("@srcZoneId", 0);//存储区 parameters.Add("@srcZoneName", string.Empty);//存储区 parameters.Add("@srcLocateId", 0);//库位 parameters.Add("@srcLocateName", string.Empty);//库位 parameters.Add("@srcErpWarehouse", miscoOrder.Lgort);//库存地 parameters.Add("@factoryId", sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", miscoOrder.Werks);//工厂代码 parameters.Add("@enabled", WmsEnumUtil.Enabled.Y.ToString());//启用 parameters.Add("@createUserid", 0);//创建人 parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parametersList.Add(parameters); } } outStockDetail = outStockDetails.FirstOrDefault(a => a.OrderNo == miscoOrders[0].Zinstno); if (outStockDetail != null) { sqlString.Clear(); sqlString.Append("UPDATE dbo.wms_outstock "); sqlString.Append(" SET order_status = @orderStatus "); sqlString.Append(" ,update_userid = @updateUserid,update_time = @updateTime "); sqlString.Append(" WHERE order_no = @orderNo "); sqlList.Add(sqlString.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", miscoOrders[0].Zinstno);//ASN号 if (miscoOrders[0].Zzlzt.Equals("X")) { parameters.Add("@orderStatus", WmsEnumUtil.MoveOrderStatus.CANCEL);//状态 已取消 } else { parameters.Add("@orderStatus", WmsEnumUtil.MoveOrderStatus.CREATE);//状态 创建 } parameters.Add("@updateUserid", 0);//更新人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//更新日期 parametersList.Add(parameters); } else { sqlString.Clear(); sqlString.Append("INSERT INTO dbo.wms_outstock(order_no,order_type,order_status,vendor_id,vendor_code,customer_id "); sqlString.Append(" ,customer_code,factory_id,factory_code,enabled,create_userid,create_time,guid) "); sqlString.Append(" VALUES(@orderNo,@orderType,@orderStatus,@vendorId,@vendorCode,@customerId "); sqlString.Append(" ,@customerCode,@factoryId,@factoryCode,@enabled,@createUserid,@createTime,newid()) "); sqlList.Add(sqlString.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", miscoOrders[0].Zinstno);//销售交货单 if (WmsEnumUtil.SapMiscoZactionType.C00.ToString().Equals(order.Zaction)) { parameters.Add("@orderType", (int)WmsEnumUtil.OutStockType.EXCEPTION_OUT_STOCK);//类型 零星出库 } else if (WmsEnumUtil.SapMiscoZactionType.C02.ToString().Equals(order.Zaction) || WmsEnumUtil.SapMiscoZactionType.C04.ToString().Equals(order.Zaction)) { parameters.Add("@orderType", (int)WmsEnumUtil.OutStockType.RESERVE_OUT);//类型 311和201预留出库 } else { parameters.Add("@orderType", 0);//类型 无效订单 } parameters.Add("@orderStatus", (int)WmsEnumUtil.MoveOrderStatus.CREATE);//状态 parameters.Add("@vendorId", 0);//供应商 parameters.Add("@vendorCode", string.Empty);//供应商 parameters.Add("@customerId", 0);//客户 parameters.Add("@customerCode", string.Empty);//客户 parameters.Add("@factoryId", sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", miscoOrders[0].Werks);//工厂代码 parameters.Add("@enabled", WmsEnumUtil.Enabled.Y.ToString());//启用 parameters.Add("@createUserid", 0);//创建人 parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parametersList.Add(parameters); } } else if (WmsEnumUtil.SapMiscoZactionType.C01.ToString().Equals(order.Zaction) || WmsEnumUtil.SapMiscoZactionType.C03.ToString().Equals(order.Zaction)) { // 写入库单 sqlString.Clear(); sqlString.Append("SELECT * FROM wms_instock_detail (nolock) "); sqlString.Append("WHERE order_no = @orderNo"); var inStockDetails = dbConn.Query(sqlString.ToString(), new { orderNo = order.Zinstno }).ToList(); var inStockDetail = inStockDetails.FirstOrDefault(a => a.ItemStatus > (int)WmsEnumUtil.MoveOrderDetailStatus.CREATE); if (inStockDetail != null) { this.UpdateSapMisco(dbConn, order.Zinstno, order.Zaction, "订单已开始执行,不允许修改"); continue; } var sysFactory = sysFactoryAll.FirstOrDefault(a => a.FactoryCode == miscoOrders[0].Werks); if (sysFactory == null) { this.UpdateSapMisco(dbConn, order.Zinstno, order.Zaction, "订单对应的工厂不存在"); continue; } foreach (var miscoOrder in miscoOrders) { var sysPart = sysParts.FirstOrDefault(a => a.PartNo == miscoOrder.Matnr); inStockDetail = inStockDetails.FirstOrDefault(a => a.PartNo == miscoOrder.Matnr); if (inStockDetail != null) { sqlString.Clear(); sqlString.Append("UPDATE dbo.wms_instock_detail "); sqlString.Append(" SET qty = @qty "); sqlString.Append(" ,item_status = @itemStatus "); sqlString.Append(" ,dest_erp_warehouse = @destErpWarehouse "); sqlString.Append(" ,update_userid = @updateUserid "); sqlString.Append(" ,update_time = @updateTime "); sqlString.Append(" WHERE order_no = @orderNo and part_no = @partNo "); sqlList.Add(sqlString.ToString()); parameters = new DynamicParameters(); parameters.Add("@qty", miscoOrder.Erfmg);//数量 if (miscoOrder.Zzlzt.Equals("X")) { parameters.Add("@itemStatus", WmsEnumUtil.MoveOrderDetailStatus.CANCEL);//明细状态 } else { parameters.Add("@itemStatus", WmsEnumUtil.MoveOrderDetailStatus.CREATE);//明细状态 } parameters.Add("@destErpWarehouse", miscoOrder.Lgort);//库存地 parameters.Add("@updateUserid", 0);//修改人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//修改日期 parameters.Add("@orderNo", miscoOrder.Zinstno);//单据号 parameters.Add("@partNo", miscoOrder.Matnr);//物料号 parametersList.Add(parameters); } else { sqlString.Clear(); sqlString.Append("INSERT INTO dbo.wms_instock_detail(order_no,item_no,part_id,part_no,part_spec,qty,rec_qty,unit "); sqlString.Append(" ,plan_date,plan_time,item_status,dest_warehouse_id,dest_warehouse_name,dest_zone_id,dest_zone_name "); sqlString.Append(" ,dest_locate_id,dest_locate_name,dest_erp_warehouse,factory_id,factory_code,enabled "); sqlString.Append(" ,create_userid,create_time) "); sqlString.Append(" VALUES(@orderNo,@itemNo,@partId,@partNo,@partSpec,@qty,@recQty,@unit "); sqlString.Append(" ,@planDate,@planTime,@itemStatus,@destWarehouseId,@destWarehouseName,@destZoneId,@destZoneName "); sqlString.Append(" ,@destLocateId,@destLocateName,@destErpWarehouse,@factoryId,@factoryCode,@enabled "); sqlString.Append(" ,@createUserid,@createTime) "); sqlList.Add(sqlString.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", miscoOrder.Zinstno);//销售交货单 parameters.Add("@itemNo", miscoOrder.Zeile);//PO item parameters.Add("@partId", sysPart.PartId);//物料Id parameters.Add("@partNo", miscoOrder.Matnr);//物料编码 parameters.Add("@partSpec", sysPart.PartSpec);//物料描述 parameters.Add("@qty", miscoOrder.Erfmg);//数量 parameters.Add("@recQty", 0);// parameters.Add("@unit", miscoOrder.Erfme);//单位 parameters.Add("@planDate", DateTime.Now.ToString("yyyy-MM-dd"));//计划交货日期 parameters.Add("@planTime", "");//计划交货日期 parameters.Add("@itemStatus", 10);//状态 parameters.Add("@destWarehouseId", 0);//仓库 parameters.Add("@destWarehouseName", string.Empty);//仓库 parameters.Add("@destZoneId", 0);//存储区 parameters.Add("@destZoneName", string.Empty);//存储区 parameters.Add("@destLocateId", 0);//库位 parameters.Add("@destLocateName", string.Empty);//库位 parameters.Add("@destErpWarehouse", miscoOrder.Lgort);//库存地 parameters.Add("@factoryId", sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", miscoOrder.Werks);//工厂代码 parameters.Add("@enabled", WmsEnumUtil.Enabled.Y.ToString());//启用 parameters.Add("@createUserid", 0);//创建人 parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parametersList.Add(parameters); } } inStockDetail = inStockDetails.FirstOrDefault(a => a.OrderNo == miscoOrders[0].Zinstno); if (inStockDetail != null) { sqlString.Clear(); sqlString.Append("UPDATE dbo.wms_instock "); sqlString.Append(" SET order_status = @orderStatus "); sqlString.Append(" ,update_userid = @updateUserid,update_time = @updateTime "); sqlString.Append(" WHERE order_no = @orderNo "); sqlList.Add(sqlString.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", miscoOrders[0].Zinstno);//订单号 if (miscoOrders[0].Zzlzt.Equals("X")) { parameters.Add("@orderStatus", WmsEnumUtil.MoveOrderStatus.CANCEL);//状态 已取消 } else { parameters.Add("@orderStatus", WmsEnumUtil.MoveOrderStatus.CREATE);//状态 创建 } parameters.Add("@updateUserid", 0);//更新人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//更新日期 parametersList.Add(parameters); } else { sqlString.Clear(); sqlString.Append("INSERT INTO dbo.wms_instock(order_no,order_type,order_status,vendor_id,vendor_code,customer_id "); sqlString.Append(" ,customer_code,factory_id,factory_code,enabled,create_userid,create_time,guid) "); sqlString.Append(" VALUES(@orderNo,@orderType,@orderStatus,@vendorId,@vendorCode,@customerId "); sqlString.Append(" ,@customerCode,@factoryId,@factoryCode,@enabled,@createUserid,@createTime,newid()) "); sqlList.Add(sqlString.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", miscoOrders[0].Zinstno);//销售交货单 if (WmsEnumUtil.SapMiscoZactionType.C01.ToString().Equals(order.Zaction)) { parameters.Add("@orderType", (int)WmsEnumUtil.InStockType.EXCEPTION_IN_STOCK);//类型 零星入库 } else if (WmsEnumUtil.SapMiscoZactionType.C03.ToString().Equals(order.Zaction)) { parameters.Add("@orderType", (int)WmsEnumUtil.InStockType.RESERVE_IN);//类型 311预留入库 } else { parameters.Add("@orderType", 0);//类型 无效订单 } parameters.Add("@orderStatus", (int)WmsEnumUtil.MoveOrderStatus.CREATE);//状态 parameters.Add("@vendorId", 0);//供应商 parameters.Add("@vendorCode", string.Empty);//供应商 parameters.Add("@customerId", 0);//客户 parameters.Add("@customerCode", string.Empty);//客户 parameters.Add("@factoryId", sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", miscoOrders[0].Werks);//工厂代码 parameters.Add("@enabled", WmsEnumUtil.Enabled.Y.ToString());//启用 parameters.Add("@createUserid", 0);//创建人 parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//创建日期 parametersList.Add(parameters); } } // 更新接口表 sqlString.Clear(); sqlString.Append("update SAP_MISCO set SYNFLG='Y',SYNTIM=@SYNTIM where ZINSTNO=@ZINSTNO and ZACTION=@ZACTION ");//更新同步状态 sqlList.Add(sqlString.ToString()); parameters = new DynamicParameters(); parameters.Add("@ZINSTNO", order.Zinstno);//单号 parameters.Add("@ZACTION", order.Zaction);//单据类型 parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); ExecuteTransaction(sqlList, parametersList); } return true; } } private int UpdateSapMisco(IDbConnection dbConn, string orderNo, string orderType, string errMsg) { StringBuilder SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_MISCO set SYNFLG='E',ERRMSG=@ERRMSG,SYNTIM=@SYNTIM where ZINSTNO=@ZINSTNO and ZACTION=@ZACTION ");//更新同步状态 DynamicParameters parameters = new DynamicParameters(); parameters.Add("@ZINSTNO", orderNo);//单号 parameters.Add("@ZACTION", orderType);//单据类型 parameters.Add("@ERRMSG", errMsg);//错误 parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//同步时间 return dbConn.Execute(SqlStringBuilder.ToString(), parameters); } #endregion #region 盘点 /// /// 获取盘点开始时,SAP冻结库存,并把盘点表传到WMS /// /// public List GetInventoryListInfo() { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { StringBuilder sql = new StringBuilder(1024); sql.Append("SELECT IBLNR,COUNT(1),SID,LGORT,WERKS FROM sap_cyco (readpast) "); sql.Append("WHERE SYNFLG = 'N' "); sql.Append("GROUP BY IBLNR,SID,LGORT,WERKS "); return dbConn.Query(sql.ToString()).ToList(); } } /// /// 添加盘点开始时,SAP冻结库存,并把盘点表传到WMS /// /// /// public bool InsertInventoryListInfo(List sapCycos) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { StringBuilder stringBuilder = new StringBuilder(); StringBuilder SqlStringBuilder = new StringBuilder(1024); DynamicParameters parameters = new DynamicParameters(); StringBuilder factoryStringBuilder = new StringBuilder(1024); factoryStringBuilder.Append("select * from sys_factory (nolock) where enabled='Y'");//工厂 List sysFactoryAll = dbConn.Query(factoryStringBuilder.ToString()).ToList(); StringBuilder partNoStringBuilder = new StringBuilder(1024); partNoStringBuilder.Append("select * from sys_part (nolock) where enabled='Y' ");//零件号 List sysPartAll = dbConn.Query(partNoStringBuilder.ToString()).ToList(); SapCyco sapCyco = new SapCyco(); for (int i = 0; i < sapCycos.Count; i++) { List sqlList = new List(); List parametersList = new List(); sapCyco = sapCycos[i]; SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT IBLNR,ZEILI,MATNR,MEINS,WERKS,LGORT,ZSTAT,SOBKZ,XBUFI,LSTAT,GJAHR FROM SAP_CYCO (nolock) WHERE IBLNR='" + sapCyco.Iblnr + "' AND SID ='" + sapCyco.Sid + "' AND (LSTAT!='X' or LSTAT is null )"); List sapCycoPartList = dbConn.Query(SqlStringBuilder.ToString()).ToList(); if (sapCycoPartList.Count > 0) { stringBuilder = new StringBuilder(); stringBuilder.Append(" SELECT * from sys_zone (nolock) WHERE erp_warehouse='" + sapCyco.Lgort + "'"); List sysZones = dbConn.Query(stringBuilder.ToString()).ToList(); SysFactory sysFactory = sysFactoryAll.Where(a => a.FactoryCode == sapCyco.Werks).FirstOrDefault();//工厂 for (int k = 0; k < sysZones.Count; k++) { stringBuilder = new StringBuilder(); stringBuilder.Append(" SELECT * from wms_check_stock_zone (nolock) WHERE order_no='" + sapCyco.Iblnr + "' and zone_name='" + sysZones[k].ZoneName + "'"); List checkStockZones = dbConn.Query(stringBuilder.ToString()).ToList(); if (checkStockZones.Count == 0) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.wms_check_stock_zone(order_no,zone_id,zone_name,factory_id,factory_code,enabled,create_userid,create_time,guid) "); SqlStringBuilder.Append(" VALUES(@orderNo,@zoneId,@zoneName,@factoryId,@factoryCode,'Y',@createUserid,CONVERT(varchar(50), GETDATE(), 21),NEWID()) "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapCyco.Iblnr); parameters.Add("@zoneId", sysZones[k].ZoneId); parameters.Add("@zoneName", sysZones[k].ZoneName); parameters.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", sapCyco.Werks);//工厂代码 parameters.Add("@enabled", "Y"); parameters.Add("@createUserid", 0); parametersList.Add(parameters); } for (int p = 0; p < sapCycoPartList.Count; p++) { SysPart sysPart = sysPartAll.Where(a => a.PartNo == sapCycoPartList[p].Matnr).FirstOrDefault();//零件号ID stringBuilder = new StringBuilder(); stringBuilder.Append(" SELECT * from wms_check_stock_range (nolock) WHERE order_no='" + sapCycoPartList[p].Iblnr + "' and zone_name='" + sysZones[k].ZoneName + "' and part_no='" + sapCycoPartList[p].Matnr + "'"); List checkStockRanges = dbConn.Query(stringBuilder.ToString()).ToList(); if (checkStockRanges.Count == 0) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.wms_check_stock_range(order_no,zone_id,zone_name,locate_id,locate_name,part_id,part_no,part_spec,factory_id,factory_code,enabled,create_userid,create_time,guid) "); SqlStringBuilder.Append(" VALUES(@orderNo,@zoneId,@zoneName,@locateId,@locateName,@partId,@partNo,@partSpec,@factoryId,@factoryCode,'Y',@createUserid "); SqlStringBuilder.Append(" ,CONVERT(varchar(50), GETDATE(), 21),NEWID()) "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapCycoPartList[p].Iblnr); parameters.Add("@zoneId", sysZones[k].ZoneId); parameters.Add("@zoneName", sysZones[k].ZoneName); parameters.Add("@locateId", 0); parameters.Add("@locateName", ""); parameters.Add("@partId", sysPart.PartId); parameters.Add("@partNo", sysPart.PartNo); parameters.Add("@partSpec", sysPart.PartSpec); parameters.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", sapCycoPartList[p].Werks);//工厂代码 parameters.Add("@enabled", "Y"); parameters.Add("@createUserid", 0); parametersList.Add(parameters); } } } for (int p = 0; p < sapCycoPartList.Count; p++) { SysPart sysPart = sysPartAll.Where(a => a.PartNo == sapCycoPartList[p].Matnr).FirstOrDefault();//零件号ID SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.wms_check_stock_part(order_no,part_id,part_no,part_spec,factory_id,factory_code "); SqlStringBuilder.Append(" ,enabled,create_userid,create_time,guid) "); SqlStringBuilder.Append(" VALUES(@orderNo,@partId,@partNo,@partSpec,@factoryId,@factoryCode,@enabled, "); SqlStringBuilder.Append(" @createUserid,CONVERT(varchar(50), GETDATE(), 21),NEWID()) "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapCycoPartList[p].Iblnr); if (sysPart == null) { parameters.Add("@partId", 0);//物料Id parameters.Add("@partSpec", "");//物料描述 } else { parameters.Add("@partId", sysPart.PartId);//物料Id parameters.Add("@partSpec", sysPart.PartSpec);//物料描述 } parameters.Add("@partNo", sapCycoPartList[p].Matnr);//物料编码 parameters.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", sapCycoPartList[p].Werks);//工厂代码 parameters.Add("@enabled", "Y"); parameters.Add("@createUserid", 0); parametersList.Add(parameters); } } SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT * FROM wms_check_stock (nolock) "); SqlStringBuilder.Append("WHERE order_no = '" + sapCyco.Iblnr + "'"); List wmsPurchaseList = dbConn.Query(SqlStringBuilder.ToString()).ToList(); string guidStr = Guid.NewGuid().ToString(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT IBLNR,ZEILI,MATNR,MEINS,WERKS,LGORT,ZSTAT,SOBKZ,XBUFI,LSTAT,GJAHR FROM SAP_CYCO (nolock) WHERE IBLNR='" + sapCyco.Iblnr + "' AND SID ='" + sapCyco.Sid + "' AND LSTAT='X' "); SapCyco sapCycomainDel = dbConn.Query(SqlStringBuilder.ToString()).FirstOrDefault(); if (wmsPurchaseList.Count > 0) { if (sapCycomainDel != null) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE dbo.wms_check_stock "); SqlStringBuilder.Append(" SET order_status = @orderStatus "); SqlStringBuilder.Append(" ,update_userid = @updateUserid,update_time = @updateTime "); SqlStringBuilder.Append(" WHERE order_no = @orderNo "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapCycomainDel.Iblnr);//盘点单号 parameters.Add("@orderStatus", (int)WmsEnumUtil.MoveOrderStatus.CANCEL);//状态 已取消 parameters.Add("@updateUserid", 0);//更新人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//更新日期 parametersList.Add(parameters); } } SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("SELECT IBLNR,ZEILI,MATNR,MEINS,WERKS,LGORT,ZSTAT,SOBKZ,XBUFI,LSTAT,GJAHR FROM SAP_CYCO (nolock) WHERE IBLNR='" + sapCyco.Iblnr + "' AND SID ='" + sapCyco.Sid + "' AND (LSTAT!='X' or LSTAT is null) "); SapCyco sapCycomain = dbConn.Query(SqlStringBuilder.ToString()).FirstOrDefault(); if (wmsPurchaseList.Count > 0) { if (sapCycomain != null) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE dbo.wms_check_stock "); SqlStringBuilder.Append(" SET order_no = @orderNo,part_no = @partNo,erp_warehouse = @erpWarehouse,order_type = @orderType "); SqlStringBuilder.Append(" ,order_status = @orderStatus,is_obvious = @isObvious,enabled = @enabled "); SqlStringBuilder.Append(" ,factory_id = @factoryId,factory_code = @factoryCode,update_userid = @updateUserid,update_time = @updateTime "); SqlStringBuilder.Append(" WHERE order_no = @orderNo "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapCycomain.Iblnr);//盘点单号 parameters.Add("@partNo", sapCycomain.Matnr);//物料编码 parameters.Add("@erpWarehouse", sapCycomain.Lgort);//库存地 parameters.Add("@orderType", 10);//类型 parameters.Add("@orderStatus", (int)WmsEnumUtil.MoveOrderStatus.CREATE);//状态 parameters.Add("@isObvious", 1);//盘点类型 明盘 SysFactory sysFactory = sysFactoryAll.Where(a => a.FactoryCode == sapCycomain.Werks).FirstOrDefault();//工厂 parameters.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", sapCycomain.Werks);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@updateUserid", 0);//更新人 parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//更新日期 parametersList.Add(parameters); } } else { if (sapCycomain != null) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("INSERT INTO dbo.wms_check_stock(order_no,part_no,erp_warehouse,order_type,order_status,is_obvious "); SqlStringBuilder.Append(" ,enabled,factory_id,factory_code,create_userid,create_time,guid) "); SqlStringBuilder.Append(" VALUES(@orderNo,@partNo,@erpWarehouse,@orderType,@orderStatus,@isObvious,@enabled "); SqlStringBuilder.Append(" ,@factoryId,@factoryCode,@createUserid,@createTime,NEWID()) "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderNo", sapCycomain.Iblnr);//盘点单号 parameters.Add("@partNo", sapCycomain.Matnr);//物料编码 parameters.Add("@erpWarehouse", sapCycomain.Lgort);//库存地 parameters.Add("@orderType", 10);//类型 静态盘点 parameters.Add("@orderStatus", (int)WmsEnumUtil.MoveOrderStatus.CREATE);//状态 parameters.Add("@isObvious", 1);//盘点类型 明盘 SysFactory sysFactory = sysFactoryAll.Where(a => a.FactoryCode == sapCycomain.Werks).FirstOrDefault();//工厂 parameters.Add("@factoryId", sysFactory == null ? 0 : sysFactory.FactoryId);//工厂ID parameters.Add("@factoryCode", sapCycomain.Werks);//工厂代码 parameters.Add("@enabled", 'Y');//启用 parameters.Add("@createUserid", 0);//更新人 parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//更新日期 parametersList.Add(parameters); } } SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_CYCO set SYNFLG='Y',SYNTIM=@SYNTIM where IBLNR=@IBLNR AND SID=@SID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@IBLNR", sapCyco.Iblnr);//盘点单号 parameters.Add("@SID", sapCyco.Sid);//ID parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); List sqlDetailList = new List(); List parametersDetailList = new List(); bool staResult = ExecuteTransaction(sqlList, parametersList); if (staResult == false) { sqlList = new List(); parametersList = new List(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_CYCO set SYNFLG='E',ERRMSG=@ERRMSG,SYNTIM=@SYNTIM where IBLNR=@IBLNR AND SID=@SID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@IBLNR", sapCyco.Iblnr);//盘点单号 parameters.Add("@SID", sapCyco.Sid);//ID parameters.Add("@ERRMSG", "同步错误,请检查接口数据!");//错误 parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); ExecuteTransaction(sqlList, parametersList); return false; } } return true; } } /// /// 获取盘点开始时,SAP冻结库存,并把盘点表传到WMS /// /// public List GetInventoryDifferenceAdjustmentInfo() { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { StringBuilder sql = new StringBuilder(1024); sql.Append("SELECT * FROM sap_difo (readpast) "); sql.Append("WHERE SYNFLG = 'N' "); sql.Append("ORDER BY RECTIM "); return dbConn.Query(sql.ToString()).ToList(); } } /// /// 添加盘点开始时,SAP冻结库存,并把盘点表传到WMS /// /// /// public bool InsertInventoryDifferenceAdjustmentInfo(List sapDifos) { using (IDbConnection dbConn = dapperDbContext.GetDbConnection()) { StringBuilder stringBuilder = new StringBuilder(); StringBuilder SqlStringBuilder = new StringBuilder(1024); DynamicParameters parameters = new DynamicParameters(); SapDifo sapDifo = new SapDifo(); for (int i = 0; i < sapDifos.Count; i++) { List sqlList = new List(); List parametersList = new List(); sapDifo = sapDifos[i]; SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append(" select a.* from sap_cyco a (nolock) left join sap_difo b (nolock) on a.IBLNR=b.IBLNR and a.ZEILI=b.ZEILI where b.IBLNR='" + sapDifo.Iblnr + "' and b.ZEILI=" + sapDifo.Zeili + " "); List sapCycos = dbConn.Query(SqlStringBuilder.ToString()).ToList(); if (sapCycos.Count > 0) { if (sapDifo.Ztzbs == "1")//正常调整 { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("select b.*,a.fact_qty,a.dest_warehouse_id,a.dest_warehouse_name,a.dest_zone_id,a.dest_zone_name" + ",a.dest_locate_id,a.dest_locate_name,c.locate_type,d.erp_warehouse as dest_erp_warehouse from [dbo].[wms_check_stock_list] a (nolock) LEFT JOIN dbo.sys_stock b (nolock) ON a.carton_no=b.carton_no " + " LEFT JOIN dbo.sys_locate c (nolock) ON a.dest_locate_id=c.locate_id" + " LEFT JOIN dbo.sys_zone d (nolock) ON a.dest_zone_id=d.zone_id where a.order_no='" + sapDifo.Iblnr + "' and b.part_no='" + sapCycos[0].Matnr + "' and a.fact_qty!=0 "); List sysStocks = dbConn.Query(SqlStringBuilder.ToString()).ToList(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append(" UPDATE dbo.wms_check_stock SET order_status = @orderStatus,update_userid=0, update_time = CONVERT(varchar(50), GETDATE(), 21) "); SqlStringBuilder.Append(" WHERE order_no = @orderNo; "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderStatus", 50);// parameters.Add("@orderNo", sapDifo.Iblnr); parametersList.Add(parameters); for (int j = 0; j < sysStocks.Count; j++) { if (sysStocks[j].FactQty != 0 && sysStocks[j].TransStatus != 10) { int statusNew = 50;//已入库 if (sysStocks[j].LocateType == (int)WmsEnumUtil.LocateType.BASICS_LOCATE || sysStocks[j].LocateType == (int)WmsEnumUtil.LocateType.MANEUVER_LOCATE || sysStocks[j].LocateType == (int)WmsEnumUtil.LocateType.COMBINATION_LOCATE) { statusNew = (int)WmsEnumUtil.StockStatus.INSTOCKED;//已入库 } else if (sysStocks[j].LocateType == (int)WmsEnumUtil.LocateType.LINE_LOCATE)//线边库位 { statusNew = (int)WmsEnumUtil.StockStatus.ONLINED; } else if (sysStocks[j].LocateType == (int)WmsEnumUtil.LocateType.NC_LOCATE)//NC库位 { statusNew = (int)WmsEnumUtil.StockStatus.NC_INSTOCK; } SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append(" UPDATE sys_stock SET qty=@qty,status=@status" + ",warehouse_id=@warehouseId,warehouse_name=@warehouseName," + " zone_id=@zoneId,zone_name=@zoneName" + ",locate_id=@locateId,locate_name=@locateName,erp_warehouse=@erpWarehouse," + "enabled='Y',update_userid=0, update_time = CONVERT(varchar(50), GETDATE(), 21) "); SqlStringBuilder.Append(" WHERE carton_no = @cartonNo; "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@qty", sysStocks[j].FactQty);//盘点更新 parameters.Add("@status", statusNew); parameters.Add("@warehouseId", sysStocks[j].DestWarehouseId); parameters.Add("@warehouseName", sysStocks[j].DestWarehouseName); parameters.Add("@zoneId", sysStocks[j].DestZoneId); parameters.Add("@zoneName", sysStocks[j].DestLocateName); parameters.Add("@locateId", sysStocks[j].DestLocateId); parameters.Add("@locateName", sysStocks[j].DestLocateName); parameters.Add("@erpWarehouse", sysStocks[j].DestErpWarehouse); parameters.Add("@cartonNo", sysStocks[j].CartonNo); parametersList.Add(parameters); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append(" INSERT INTO dbo.sys_stock_trans (trans_code, carton_no, part_id,part_no, part_spec,src_locate_id, src_locate_name, "); SqlStringBuilder.Append(" dest_locate_id,dest_locate_name,old_qty, new_qty,trans_qty,old_status,new_status,unit,factory_id,factory_code, "); SqlStringBuilder.Append(" src_erp_warehouse,dest_erp_warehouse, src_warehouse_id,src_warehouse_name,dest_warehouse_id,dest_warehouse_name, "); SqlStringBuilder.Append(" src_zone_id,src_zone_name,dest_zone_id, dest_zone_name,enabled,create_userid,create_time,guid,ref_order_no) "); SqlStringBuilder.Append("VALUES(@transCode, @cartonNo, @partId,@partNo, @partSpec,@srcLocateId, @srcLocateName, "); SqlStringBuilder.Append(" @destLocateId,@destLocateName,@oldQty, @newQty,@transQty,@oldStatus,@newStatus,@unit,@factoryId,@factoryCode, "); SqlStringBuilder.Append(" @srcErpWarehouse,@destErpWarehouse, @srcWarehouseId,@srcWarehouseName,@destWarehouseId,@destWarehouseName, "); SqlStringBuilder.Append(" @srcZoneId,@srcZoneName,@destZoneId, @destZoneName,@enabled,@createUserid,@createTime,@guid,@ref_order_no) "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@transCode", 270);//盘点更新 parameters.Add("@cartonNo", sysStocks[j].CartonNo); parameters.Add("@partId", sysStocks[j].PartId); parameters.Add("@partNo", sysStocks[j].PartNo); parameters.Add("@partSpec", sysStocks[j].PartSpec); parameters.Add("@srcLocateId", sysStocks[j].LocateId);//源库位 parameters.Add("@srcLocateName", sysStocks[j].LocateName); parameters.Add("@destLocateId", sysStocks[j].LocateId);//目标库位 parameters.Add("@destLocateName", sysStocks[j].LocateName); parameters.Add("@oldQty", sysStocks[j].Qty); parameters.Add("@newQty", sysStocks[j].FactQty); parameters.Add("@transQty", sysStocks[j].FactQty); parameters.Add("@oldStatus", sysStocks[j].Status); parameters.Add("@newStatus", sysStocks[j].Status); parameters.Add("@unit", sysStocks[j].Unit); parameters.Add("@factoryId", sysStocks[j].FactoryId); parameters.Add("@factoryCode", sysStocks[j].FactoryCode); parameters.Add("@srcErpWarehouse", sysStocks[j].ErpWarehouse); parameters.Add("@destErpWarehouse", sysStocks[j].ErpWarehouse); parameters.Add("@srcWarehouseId", sysStocks[j].WarehouseId); parameters.Add("@srcWarehouseName", sysStocks[j].WarehouseName); parameters.Add("@destWarehouseId", sysStocks[j].WarehouseId); parameters.Add("@destWarehouseName", sysStocks[j].WarehouseName); parameters.Add("@srcZoneId", sysStocks[j].ZoneId); parameters.Add("@srcZoneName", sysStocks[j].ZoneName); parameters.Add("@destZoneId", sysStocks[j].ZoneId); parameters.Add("@destZoneName", sysStocks[j].ZoneName); parameters.Add("@enabled", "Y"); parameters.Add("@createUserid", 0); parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); parameters.Add("@guid", Guid.NewGuid().ToString()); parameters.Add("@ref_order_no", sapDifo.Iblnr); parametersList.Add(parameters); } } } else //无差异,不调整 { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("select b.*,a.fact_qty from [dbo].[wms_check_stock_list] a (nolock) LEFT JOIN dbo.sys_stock b (nolock) ON a.carton_no=b.carton_no where order_no='" + sapDifo.Iblnr + "' and a.fact_qty!=0 "); List sysStocks = dbConn.Query(SqlStringBuilder.ToString()).ToList(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append(" UPDATE dbo.wms_check_stock SET order_status = @orderStatus,update_userid=0, update_time = CONVERT(varchar(50), GETDATE(), 21) "); SqlStringBuilder.Append(" WHERE order_no = @orderNo; "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@orderStatus", 50);// parameters.Add("@orderNo", sapDifo.Iblnr); parametersList.Add(parameters); for (int j = 0; j < sysStocks.Count; j++) { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append(" UPDATE sys_stock SET enabled='Y' ,update_userid=0, update_time = CONVERT(varchar(50), GETDATE(), 21) "); SqlStringBuilder.Append(" WHERE carton_no = @cartonNo; "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@cartonNo", sysStocks[j].CartonNo); parametersList.Add(parameters); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append(" INSERT INTO dbo.sys_stock_trans (trans_code, carton_no, part_id,part_no, part_spec,src_locate_id, src_locate_name, "); SqlStringBuilder.Append(" dest_locate_id,dest_locate_name,old_qty, new_qty,trans_qty,old_status,new_status,unit,factory_id,factory_code, "); SqlStringBuilder.Append(" src_erp_warehouse,dest_erp_warehouse, src_warehouse_id,src_warehouse_name,dest_warehouse_id,dest_warehouse_name, "); SqlStringBuilder.Append(" src_zone_id,src_zone_name,dest_zone_id, dest_zone_name,enabled,create_userid,create_time,guid,ref_order_no) "); SqlStringBuilder.Append("VALUES(@transCode, @cartonNo, @partId,@partNo, @partSpec,@srcLocateId, @srcLocateName, "); SqlStringBuilder.Append(" @destLocateId,@destLocateName,@oldQty, @newQty,@transQty,@oldStatus,@newStatus,@unit,@factoryId,@factoryCode, "); SqlStringBuilder.Append(" @srcErpWarehouse,@destErpWarehouse, @srcWarehouseId,@srcWarehouseName,@destWarehouseId,@destWarehouseName, "); SqlStringBuilder.Append(" @srcZoneId,@srcZoneName,@destZoneId, @destZoneName,@enabled,@createUserid,@createTime,@guid,@ref_order_no) "); sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@transCode", 270);//盘点更新 parameters.Add("@cartonNo", sysStocks[j].CartonNo); parameters.Add("@partId", sysStocks[j].PartId); parameters.Add("@partNo", sysStocks[j].PartNo); parameters.Add("@partSpec", sysStocks[j].PartSpec); parameters.Add("@srcLocateId", sysStocks[j].LocateId);//源库位 parameters.Add("@srcLocateName", sysStocks[j].LocateName); parameters.Add("@destLocateId", sysStocks[j].LocateId);//目标库位 parameters.Add("@destLocateName", sysStocks[j].LocateName); parameters.Add("@oldQty", sysStocks[j].Qty); parameters.Add("@newQty", sysStocks[j].Qty); parameters.Add("@transQty", sysStocks[j].Qty); parameters.Add("@oldStatus", sysStocks[j].Status); parameters.Add("@newStatus", sysStocks[j].Status); parameters.Add("@unit", sysStocks[j].Unit); parameters.Add("@factoryId", sysStocks[j].FactoryId); parameters.Add("@factoryCode", sysStocks[j].FactoryCode); parameters.Add("@srcErpWarehouse", sysStocks[j].ErpWarehouse); parameters.Add("@destErpWarehouse", sysStocks[j].ErpWarehouse); parameters.Add("@srcWarehouseId", sysStocks[j].WarehouseId); parameters.Add("@srcWarehouseName", sysStocks[j].WarehouseName); parameters.Add("@destWarehouseId", sysStocks[j].WarehouseId); parameters.Add("@destWarehouseName", sysStocks[j].WarehouseName); parameters.Add("@srcZoneId", sysStocks[j].ZoneId); parameters.Add("@srcZoneName", sysStocks[j].ZoneName); parameters.Add("@destZoneId", sysStocks[j].ZoneId); parameters.Add("@destZoneName", sysStocks[j].ZoneName); parameters.Add("@enabled", "Y"); parameters.Add("@createUserid", 0); parameters.Add("@createTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); parameters.Add("@guid", Guid.NewGuid().ToString()); parameters.Add("@ref_order_no", sapDifo.Iblnr); parametersList.Add(parameters); } } SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_DIFO set SYNFLG='Y',SYNTIM=CONVERT(varchar(50), GETDATE(), 21) where GUID=@GUID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@GUID", sapDifo.Guid);// parametersList.Add(parameters); bool staResult = ExecuteTransaction(sqlList, parametersList); if (staResult == false) { sqlList = new List(); parametersList = new List(); SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_DIFO set SYNFLG='E',ERRMSG=@ERRMSG,SYNTIM=@SYNTIM where GUID=@GUID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@GUID", sapDifo.Guid);//ID parameters.Add("@ERRMSG", "同步错误,请检查接口数据!");//错误 parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); ExecuteTransaction(sqlList, parametersList); return false; } } else { SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("update SAP_DIFO set SYNFLG='E',ERRMSG=@ERRMSG,SYNTIM=CONVERT(varchar(50), GETDATE(), 21) where GUID=@GUID ");//更新同步状态 sqlList.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@GUID", sapDifo.Guid);// parameters.Add("@ERRMSG", "同步错误,未查询到对应盘点单信息!");//错误 parameters.Add("@SYNTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间 parametersList.Add(parameters); bool staResult = ExecuteTransaction(sqlList, parametersList); } } return true; } } #endregion } }