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

3145 lines
201 KiB
C#

This file contains ambiguous Unicode characters!

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

using Dapper;
using Estsh.Core.Base;
using Estsh.Core.Dapper;
using Estsh.Core.Wms.IRepositories;
using Estsh.Core.Model.Result;
using Estsh.Core.Repositories;
using System.Collections;
using System.Data;
using System.Text;
using System.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<SapPt>, IInterfaceMasterRepository
{
public InterfaceMasterRepository(DapperDbContext _dapperDbContext) : base(_dapperDbContext)
{
}
#region 物料
/// <summary>
/// 获取物料主数据的数据
/// </summary>
/// <returns></returns>
public List<SapPt> 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<SapPt>(sql.ToString()).ToList();
}
}
//添加物料接口表到物料表
public bool InsertMaterialMasterInfo(List<SapPt> sapPts)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
SapPt sapPt = new SapPt();
for (int i = 0; i < sapPts.Count; i++)
{
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
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<SysPart> sysParts = dbConn.Query<SysPart>(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<SysFactory>(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<SysFactory>(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<string>();
parametersList = new List<DynamicParameters>();
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;
}
}
/// <summary>
/// 获取供应商基本信息
/// </summary>
/// <returns></returns>
public List<SapSu> 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<SapSu>(sql.ToString()).ToList();
}
}
/// <summary>
/// 添加供应商接口表到供应商表
/// </summary>
/// <param name="sapSu"></param>
/// <returns></returns>
public bool InsertSupplierMasterInfo(List<SapSu> 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> sysFactory = dbConn.Query<SysFactory>(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<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
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<SysVendor> sysVendors = dbConn.Query<SysVendor>(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<string>();
parametersList = new List<DynamicParameters>();
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;
}
}
/// <summary>
/// 获取客户基本信息
/// </summary>
/// <returns></returns>
public List<SapCu> 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<SapCu>(sql.ToString()).ToList();
}
}
/// <summary>
/// 添加客户接口表到供应商表
/// </summary>
/// <param name="sapCu"></param>
/// <returns></returns>
public bool InsertCustomerMasterInfo(List<SapCu> 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> sysFactory = dbConn.Query<SysFactory>(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<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
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<SysCustomer> sysCustomers = dbConn.Query<SysCustomer>(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<string>();
parametersList = new List<DynamicParameters>();
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;
}
}
/// <summary>
/// 获取物料号与客户物料号对照信息
/// </summary>
/// <returns></returns>
public List<SapPtcpt> 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<SapPtcpt>(sql.ToString()).ToList();
}
}
/// <summary>
/// 添加物料号与客户物料号对照信息
/// </summary>
/// <param name="sapPtcpt"></param>
/// <returns></returns>
public bool InsertCustomerItemMasterInfo(List<SapPtcpt> 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> sysFactory = dbConn.Query<SysFactory>(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<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
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> sysPart = dbConn.Query<SysPart>(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<SysCustomerPart> customerParts = dbConn.Query<SysCustomerPart>(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<SysCustomer> sysCustomers = dbConn.Query<SysCustomer>(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<SysCustomer> sysCustomers = dbConn.Query<SysCustomer>(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<string>();
parametersList = new List<DynamicParameters>();
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;
}
}
/// <summary>
/// 获取MBOM同步到WMS系统
/// </summary>
/// <returns></returns>
public List<SapBom> 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<SapBom>(sql.ToString()).ToList();
}
}
/// <summary>
/// 添加MBOM同步到WMS系统
/// </summary>
/// <param name="sapPtcpt"></param>
/// <returns></returns>
public bool InsertBomMasterInfo(List<SapBom> sapBomsList)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
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<SysFactory> sysFactorys = dbConn.Query<SysFactory>(factoryStringBuilder.ToString()).ToList();
StringBuilder partNoStringBuilder = new StringBuilder(1024);
partNoStringBuilder.Append("select * from sys_part (nolock) where enabled='Y' ");//零件号ID
List<SysPart> sysParts = dbConn.Query<SysPart>(partNoStringBuilder.ToString()).ToList();
List<string> sapBomsListPartno = sapBomsList.Select(a => a.Matnr).Distinct().ToList();
for (int i = 0; i < sapBomsListPartno.Count; i++)
{
List<SapBom> sapBoms = sapBomsList.Where(a => a.Matnr.Equals(sapBomsListPartno[i])).ToList();
SapBom sapBom = sapBoms[0];
string guidStr = Guid.NewGuid().ToString();
sqlList = new List<string>();
parametersList = new List<DynamicParameters>();
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append(" SELECT * from sys_bom (nolock) WHERE part_no='" + sapBom.Matnr + "'");
List<SysBom> boms = dbConn.Query<SysBom>(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<string>();
//parametersList = new List<DynamicParameters>();
//SqlStringBuilder = new StringBuilder(1024);
//SqlStringBuilder.Append("select * from sys_bom (nolock) where part_no='" + sapBom.Matnr + "' ");
//List<SysBom> sysBom = dbConn.Query<SysBom>(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<SysBomDetail> sysBomDetailList = dbConn.Query<SysBomDetail>(SqlStringBuilder.ToString()).ToList();
foreach (var sapBomDetail in sapBoms)
{
List<SysBomDetail> 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<SysPart> 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<SysPart> 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<string>();
parametersList = new List<DynamicParameters>();
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<string>();
parametersList = new List<DynamicParameters>();
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("select * from sys_bom (nolock) where part_no='" + sapBom.Matnr + "' ");
List<SysBom> sysBom = dbConn.Query<SysBom>(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<SysPart> sysPartItem = dbConn.Query<SysPart>(partNoStringBuilder.ToString()).ToList();
List<SysPart> 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<string>();
parametersList = new List<DynamicParameters>();
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<string>();
parametersList = new List<DynamicParameters>();
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 采购收货
/// <summary>
/// SAP系统把ASN传递到WMS用于采购收货
/// </summary>
/// <returns></returns>
public List<SapAsn> 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<SapAsn>(sql.ToString()).ToList();
}
}
/// <summary>
/// 添加SAP系统把ASN传递到WMS用于采购收货
/// </summary>
/// <param name="sapCu"></param>
/// <returns></returns>
public bool InsertASNDataInfo(List<SapAsn> sapAsns)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
StringBuilder SqlStringBuilder = new StringBuilder(1024);
DynamicParameters parameters = new DynamicParameters();
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
StringBuilder factoryStringBuilder = new StringBuilder(1024);
factoryStringBuilder.Append("select * from sys_factory (nolock) where enabled='Y'");//工厂
List<SysFactory> sysFactoryAll = dbConn.Query<SysFactory>(factoryStringBuilder.ToString()).ToList();
StringBuilder vendorStringBuilder = new StringBuilder(1024);
vendorStringBuilder.Append("select * from sys_vendor (nolock) where enabled='Y'");//供应商信息
List<SysVendor> sysVendorAll = dbConn.Query<SysVendor>(vendorStringBuilder.ToString()).ToList();
StringBuilder partNoStringBuilder = new StringBuilder(1024);
partNoStringBuilder.Append("select * from sys_part (nolock) where enabled='Y' ");//零件号
List<SysPart> sysPartAll = dbConn.Query<SysPart>(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<SapAsn> saps = dbConn.Query<SapAsn>(SqlStringBuilder.ToString()).ToList();
SqlStringBuilder.Clear();
SqlStringBuilder.Append("SELECT * FROM sys_stock (nolock) ");
SqlStringBuilder.Append("WHERE ref_order_no = '" + sapAsns[s].Zasnno + "'");
List<SysStock> stocksList = dbConn.Query<SysStock>(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<WmsPurchaseDetail> wmsPurchaseDetailsList = dbConn.Query<WmsPurchaseDetail>(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<SapAsn> sapAsnsDetailsDel = dbConn.Query<SapAsn>(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<SapAsn> sapAsnsDetails = dbConn.Query<SapAsn>(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> 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<WmsPurchase> wmsPurchasesList = dbConn.Query<WmsPurchase>(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<SapAsn>(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<SapAsn>(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<string>();
parametersList = new List<DynamicParameters>();
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;
}
}
/// <summary>
/// 获取SAP系统把PO传递到WMS用于采购收货
/// </summary>
/// <returns></returns>
public List<SapDspo> 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<SapDspo>(sql.ToString()).ToList();
}
}
/// <summary>
/// 添加SAP系统把PO传递到WMS用于采购收货
/// </summary>
/// <param name="sapCu"></param>
/// <returns></returns>
public bool InsertPODataInfo(List<SapDspo> 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<SysFactory> sysFactoryAll = dbConn.Query<SysFactory>(factoryStringBuilder.ToString()).ToList();
StringBuilder vendorStringBuilder = new StringBuilder(1024);
vendorStringBuilder.Append("select * from sys_vendor (nolock) where enabled='Y'");//供应商信息
List<SysVendor> sysVendorAll = dbConn.Query<SysVendor>(vendorStringBuilder.ToString()).ToList();
StringBuilder partNoStringBuilder = new StringBuilder(1024);
partNoStringBuilder.Append("select * from sys_part (nolock) where enabled='Y' ");//零件号
List<SysPart> sysPartAll = dbConn.Query<SysPart>(partNoStringBuilder.ToString()).ToList();
for (int s = 0; s < sapDspos.Count; s++)
{
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
#region 明细
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("SELECT * FROM wms_purchase_detail (nolock) ");
SqlStringBuilder.Append("WHERE order_no = '" + sapDspos[s].Ebeln + "'");
List<WmsPurchaseDetail> wmsPurchaseDetailsList = dbConn.Query<WmsPurchaseDetail>(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<SapDspo> sapDsposDetailsDel = dbConn.Query<SapDspo>(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<SapDspo> sapDsposDetails = dbConn.Query<SapDspo>(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> 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<WmsPurchase> wmsPurchasesList = dbConn.Query<WmsPurchase>(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<SapDspo>(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<SapDspo>(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<string>();
parametersList = new List<DynamicParameters>();
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 移动
/// <summary>
/// 获取SAP系统将一定期间内待发运交货单信息发布到WMS用于后续捡配发货
/// </summary>
/// <returns></returns>
public List<SapDn> 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<SapDn>(sql.ToString()).ToList();
}
}
/// <summary>
/// 添加SAP系统将一定期间内待发运交货单信息发布到WMS用于后续捡配发货
/// </summary>
/// <param name="sapCu"></param>
/// <returns></returns>
public bool InsertSalesAndDeliveryPlanInfo(List<SapDn> 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<SysFactory> sysFactoryAll = dbConn.Query<SysFactory>(factoryStringBuilder.ToString()).ToList();
StringBuilder customerStringBuilder = new StringBuilder(1024);
customerStringBuilder.Append("select * from sys_customer (nolock) where enabled='Y'");//客户信息
List<SysCustomer> sysCustomerAll = dbConn.Query<SysCustomer>(customerStringBuilder.ToString()).ToList();
StringBuilder partNoStringBuilder = new StringBuilder(1024);
partNoStringBuilder.Append("select * from sys_part (nolock) where enabled='Y' ");//零件号
List<SysPart> sysPartAll = dbConn.Query<SysPart>(partNoStringBuilder.ToString()).ToList();
for (int s = 0; s < sapDns.Count; s++)
{
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
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<WmsOutstockDetail> wmsOutstockDetailsList = dbConn.Query<WmsOutstockDetail>(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<SapDn> sapDnsDetails = dbConn.Query<SapDn>(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<SapDn>(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<WmsOutstock> wmsOutstocks = dbConn.Query<WmsOutstock>(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<string>();
parametersList = new List<DynamicParameters>();
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;
}
}
/// <summary>
/// 获取SAP把物料的零星出(入指令传到WMS
/// </summary>
/// <returns></returns>
public List<SapMisco> 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<SapMisco>(sql.ToString()).ToList();
}
}
/// <summary>
/// 添加SAP把物料的零星出(入指令传到WMS
/// </summary>
/// <param name="sapCu"></param>
/// <returns></returns>
public bool InsertSporadicEntryAndExitInfo(List<SapMisco> sapMiscos)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
StringBuilder sqlString = new StringBuilder(1024);
DynamicParameters parameters = new DynamicParameters();
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
sqlString.Clear();
sqlString.Append("select * from sys_factory (nolock) where enabled='Y'");//工厂
List<SysFactory> sysFactoryAll = dbConn.Query<SysFactory>(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<SysPart>(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<WmsOutstockDetail>(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<WmsInstockDetail>(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 盘点
/// <summary>
/// 获取盘点开始时SAP冻结库存并把盘点表传到WMS
/// </summary>
/// <returns></returns>
public List<SapCyco> 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<SapCyco>(sql.ToString()).ToList();
}
}
/// <summary>
/// 添加盘点开始时SAP冻结库存并把盘点表传到WMS
/// </summary>
/// <param name="sapCu"></param>
/// <returns></returns>
public bool InsertInventoryListInfo(List<SapCyco> 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<SysFactory> sysFactoryAll = dbConn.Query<SysFactory>(factoryStringBuilder.ToString()).ToList();
StringBuilder partNoStringBuilder = new StringBuilder(1024);
partNoStringBuilder.Append("select * from sys_part (nolock) where enabled='Y' ");//零件号
List<SysPart> sysPartAll = dbConn.Query<SysPart>(partNoStringBuilder.ToString()).ToList();
SapCyco sapCyco = new SapCyco();
for (int i = 0; i < sapCycos.Count; i++)
{
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
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<SapCyco> sapCycoPartList = dbConn.Query<SapCyco>(SqlStringBuilder.ToString()).ToList();
if (sapCycoPartList.Count > 0)
{
stringBuilder = new StringBuilder();
stringBuilder.Append(" SELECT * from sys_zone (nolock) WHERE erp_warehouse='" + sapCyco.Lgort + "'");
List<SysZone> sysZones = dbConn.Query<SysZone>(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<WmsCheckStockZone> checkStockZones = dbConn.Query<WmsCheckStockZone>(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<WmsCheckStockRange> checkStockRanges = dbConn.Query<WmsCheckStockRange>(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<WmsPurchase> wmsPurchaseList = dbConn.Query<WmsPurchase>(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<SapCyco>(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<SapCyco>(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<string> sqlDetailList = new List<string>();
List<DynamicParameters> parametersDetailList = new List<DynamicParameters>();
bool staResult = ExecuteTransaction(sqlList, parametersList);
if (staResult == false)
{
sqlList = new List<string>();
parametersList = new List<DynamicParameters>();
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;
}
}
/// <summary>
/// 获取盘点开始时SAP冻结库存并把盘点表传到WMS
/// </summary>
/// <returns></returns>
public List<SapDifo> 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<SapDifo>(sql.ToString()).ToList();
}
}
/// <summary>
/// 添加盘点开始时SAP冻结库存并把盘点表传到WMS
/// </summary>
/// <param name="sapCu"></param>
/// <returns></returns>
public bool InsertInventoryDifferenceAdjustmentInfo(List<SapDifo> 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<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
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<SapCyco> sapCycos = dbConn.Query<SapCyco>(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<SysStock> sysStocks = dbConn.Query<SysStock>(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<SysStock> sysStocks = dbConn.Query<SysStock>(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<string>();
parametersList = new List<DynamicParameters>();
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
}
}