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.

467 lines
25 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 System.Data.SqlTypes;
namespace Estsh.Core.Wms.Repositories
{
public class JisShippingRepository : BaseRepository<MesJisShipping>, IJisShippingRepository
{
public JisShippingRepository(DapperDbContext _dapperDbContext) : base(_dapperDbContext)
{
}
/// <summary>
/// 查询成品发运接口
/// </summary>
/// <returns></returns>
public List<MesWmsJisShipping> GetFinishedShippedInfo()
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
StringBuilder sql = new StringBuilder(1024);
sql.Append("SELECT top 3000 * FROM MES_WMS_JIS_SHIPPING (nolock) ");
sql.Append("WHERE syn_flg = 10 "); //未同步10 已同步20
sql.Append("ORDER BY create_time ");
return dbConn.Query<MesWmsJisShipping>(sql.ToString()).ToList();
}
}
/// <summary>
/// 处理成品发运接口
/// </summary>
/// <param name="mesWmsJisShippings"></param>
/// <returns></returns>
public bool InsertFinishedShippedInfo(List<MesWmsJisShipping> mesWmsJisShippings)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append(" SELECT * from sys_part (nolock) ");
List<SysPart> sysPartsAll = dbConn.Query<SysPart>(stringBuilder.ToString()).ToList();
stringBuilder = new StringBuilder();
stringBuilder.Append(" SELECT * from sys_pdline (nolock) ");
List<SysPdline> sysPdlinesAll = dbConn.Query<SysPdline>(stringBuilder.ToString()).ToList();
StringBuilder factoryStringBuilder = new StringBuilder(1024);
factoryStringBuilder.Append("select * from sys_factory (nolock) ");//工厂代码获取工厂ID
List<SysFactory> sysFactoryAll = dbConn.Query<SysFactory>(factoryStringBuilder.ToString()).ToList();
MesWmsJisShipping mesWmsJis = new MesWmsJisShipping();
for (int i = 0; i < mesWmsJisShippings.Count; i++)
{
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
mesWmsJis = mesWmsJisShippings[i];
StringBuilder SqlStringBuilder = new StringBuilder(1024);
DynamicParameters parameters = new DynamicParameters();
List<SysPart> sysParts = sysPartsAll.Where(a => a.PartNo == mesWmsJis.PartNo).ToList();//零件号ID
List<SysPdline> sysPdlines = sysPdlinesAll.Where(a => a.PdlineCode == mesWmsJis.PdlineCode).ToList();//产线
List<SysFactory> sysFactory = sysFactoryAll.Where(a => a.FactoryCode == mesWmsJis.FactoryCode).ToList();//工厂
stringBuilder = new StringBuilder();
stringBuilder.Append(" SELECT * from mes_jis_shipping (nolock) WHERE pdline_code='" + mesWmsJis.PdlineCode + "' and part_no='" + mesWmsJis.PartNo + "' and serial_number='" + mesWmsJis.SerialNumber + "'");
List<MesJisShipping> mesJisShippings = dbConn.Query<MesJisShipping>(stringBuilder.ToString()).ToList();
if (mesJisShippings.Count > 0)
{
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("UPDATE dbo.mes_jis_shipping ");
SqlStringBuilder.Append(" SET serial_number = @serialNumber ");
SqlStringBuilder.Append(" ,qty += @qty ,ship_status = @shipStatus ");
SqlStringBuilder.Append(" ,erp_warehouse = @erpWarehouse ,erp_status = @erpStatus ");
SqlStringBuilder.Append(" ,customer_id = @customerId ,customer_code = @customerCode ");
SqlStringBuilder.Append(" ,factory_id = @factoryId ,factory_code = @factoryCode ");
SqlStringBuilder.Append(" ,enabled = @enabled ,update_userid = @updateUserid ");
SqlStringBuilder.Append(" ,update_time = @updateTime,order_no=@order_no ");
SqlStringBuilder.Append(" WHERE guid = @guid ");
sqlList.Add(SqlStringBuilder.ToString());
parameters.Add("@serialNumber", mesWmsJis.SerialNumber);//产品条码
parameters.Add("@qty", mesWmsJis.Qty);//数量
parameters.Add("@order_no", mesWmsJis.OrderNo);//数量
parameters.Add("@erpWarehouse", "");//ERP库存地
parameters.Add("@shipStatus", "10");//
parameters.Add("@erpStatus", "10");//
parameters.Add("@errMsg", "");//
StringBuilder customerStringBuilder = new StringBuilder(1024);
customerStringBuilder.Append("select * from sys_customer (nolock) where customer_code='" + mesWmsJis.CustomerCode + "'");//客户信息
List<SysCustomer> sysCustomers = dbConn.Query<SysCustomer>(customerStringBuilder.ToString()).ToList();
if (sysCustomers.Count == 0)
{
parameters.Add("@customerId", 0);//客户ID
}
else
{
parameters.Add("@customerId", sysCustomers[0].CustomerId);//客户ID
}
parameters.Add("@customerCode", mesWmsJis.CustomerCode);//客户代码
if (sysFactory.Count == 0)
{
parameters.Add("@factoryId", 0);//工厂ID
}
else
{
parameters.Add("@factoryId", sysFactory[0].FactoryId);//工厂ID
}
parameters.Add("@factoryCode", mesWmsJis.FactoryCode);//工厂代码
parameters.Add("@enabled", 'Y');//启用
parameters.Add("@updateUserid", 0);//修改人
parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//修改日期
parameters.Add("@GUID", mesJisShippings[0].Guid);//GUID
parametersList.Add(parameters);
}
else
{
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("INSERT INTO dbo.mes_jis_shipping (pdline_id,pdline_code,part_id,part_no,part_spec ");
SqlStringBuilder.Append(" ,serial_number,qty,ship_status,erp_warehouse,erp_status,customer_id,customer_code ");
SqlStringBuilder.Append(" ,err_msg,factory_id,factory_code,enabled,create_userid,create_time,order_no) ");
SqlStringBuilder.Append(" VALUES(@pdlineId,@pdlineCode,@partId,@partNo,@partSpec,@serialNumber,@qty,@shipStatus ");
SqlStringBuilder.Append(" ,@erpWarehouse,@erpStatus,@customerId,@customerCode,@errMsg,@factoryId ");
SqlStringBuilder.Append(" ,@factoryCode,@enabled,@createUserid,@createTime,@order_no) ");
sqlList.Add(SqlStringBuilder.ToString());
if (sysPdlines.Count > 0)
{
parameters.Add("@pdlineId", sysPdlines[0].PdlineId);//生产线id
parameters.Add("@pdlineCode", sysPdlines[0].PdlineCode);//生产线代码
}
else
{
parameters.Add("@pdlineId", 0);//生产线id
parameters.Add("@pdlineCode", mesWmsJis.PdlineCode);//生产线代码
}
if (sysParts.Count > 0)
{
parameters.Add("@partId", sysParts[0].PartId);//零件号ID
parameters.Add("@partNo", sysParts[0].PartNo);//零件号
parameters.Add("@partSpec", sysParts[0].PartSpec);//简码
}
else
{
parameters.Add("@partId", 0);//零件号ID
parameters.Add("@partNo", mesWmsJis.PartNo);//零件号
parameters.Add("@partSpec", "");//简码
}
parameters.Add("@serialNumber", mesWmsJis.SerialNumber);//产品条码
parameters.Add("@qty", mesWmsJis.Qty);//数量
parameters.Add("@order_no", mesWmsJis.OrderNo);//发运单号
parameters.Add("@erpWarehouse", "");//ERP库存地
parameters.Add("@shipStatus", "10");//
parameters.Add("@erpStatus", "10");//
parameters.Add("@errMsg", "");//
StringBuilder customerStringBuilder = new StringBuilder(1024);
customerStringBuilder.Append("select * from sys_customer (nolock) where customer_code='" + mesWmsJis.CustomerCode + "'");//客户信息
List<SysCustomer> sysCustomers = dbConn.Query<SysCustomer>(customerStringBuilder.ToString()).ToList();
if (sysCustomers.Count == 0)
{
parameters.Add("@customerId", 0);//客户ID
}
else
{
parameters.Add("@customerId", sysCustomers[0].CustomerId);//客户ID
}
parameters.Add("@customerCode", mesWmsJis.CustomerCode);//客户代码
if (sysFactory.Count == 0)
{
parameters.Add("@factoryId", 0);//工厂ID
}
else
{
parameters.Add("@factoryId", sysFactory[0].FactoryId);//工厂ID
}
parameters.Add("@factoryCode", mesWmsJis.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 MES_WMS_JIS_SHIPPING set syn_flg=@synFlg,syn_time=@synTime,update_userid=@updateUserid,update_time=@updateTime where GUID=@GUID ");//更新同步状态
sqlList.Add(SqlStringBuilder.ToString());
parameters = new DynamicParameters();
parameters.Add("@GUID", mesWmsJis.Guid);//ID
parameters.Add("@synFlg", "20");//已同步
parameters.Add("@synTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间
parameters.Add("@updateUserid", 0);//更新人
parameters.Add("@updateTime", 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 MES_WMS_JIS_SHIPPING set syn_flg=@synFlg,syn_time=@synTime,err_msg=@errMsg,update_userid=@updateUserid,update_time=@updateTime where GUID=@GUID ");//更新同步状态
sqlList.Add(SqlStringBuilder.ToString());
parameters = new DynamicParameters();
parameters.Add("@GUID", mesWmsJis.Guid);//ID
parameters.Add("@synFlg", "30");//同步异常
parameters.Add("@synTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//同步时间
parameters.Add("@errMsg", "同步错误,请检查接口数据!");//错误
parameters.Add("@updateUserid", 0);//更新人
parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//更新时间
parametersList.Add(parameters);
ExecuteTransaction(sqlList, parametersList);
return false;
}
}
return true;
}
}
/// <summary>
/// 获取待Jis发运的数据
/// </summary>
/// <returns></returns>
public List<MesJisShipping> GetJisShippingInfo()
{
IDbConnection dbConn = dapperDbContext.GetDbConnection();
//using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
//{
// if (dbConn.State == ConnectionState.Closed)
// {
// dbConn.Open();
// }
StringBuilder sql = new StringBuilder(1024);
sql.Append("SELECT top 1000 * FROM mes_jis_shipping (readpast) ");
sql.Append("WHERE ship_status = @shipStatus ");
sql.Append(" AND enabled = 'Y' ");
sql.Append("ORDER BY create_time ");
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@shipStatus", (int)MesEnumUtil.JisShipStatus.INIT);
return dbConn.Query<MesJisShipping>(sql.ToString(), parameters).ToList();
//}
}
/// <summary>
/// 更新待Jis发运的数据
/// </summary>
/// <param name="outPdline"></param>
/// <param name="status"></param>
/// <returns></returns>
public int UpdateJisShippingInfo(MesJisShipping jisShip,
MesEnumUtil.JisShipStatus status, string msg = "")
{
IDbConnection dbConn = dapperDbContext.GetDbConnection();
//using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
//{
// if (dbConn.State == ConnectionState.Closed)
// {
// dbConn.Open();
// }
StringBuilder sql = new StringBuilder(1024);
sql.Append("UPDATE dbo.mes_jis_shipping ");
sql.Append("SET ship_status = @shipStatus, ");
sql.Append(" err_msg = @errMsg, ");
sql.Append(" update_userid = @updateUserid, ");
sql.Append(" update_time = @updateTime ");
sql.Append("WHERE serial_number = @serialNumber ");
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@shipStatus", status);
parameters.Add("@errMsg", msg);
parameters.Add("@updateUserid", 0);
parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
parameters.Add("@serialNumber", jisShip.SerialNumber);
return dbConn.Execute(sql.ToString(), parameters);
//}
}
/// <summary>
/// 处理JIS发运
/// </summary>
/// <param name="outPdline"></param>
/// <param name="bomDetails"></param>
/// <param name="pdline"></param>
/// <returns></returns>
public bool DoJisShip(List<MesJisShipping> jisShips, List<SysStock> cartonInfos)
{
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
StringBuilder sql = new StringBuilder(1024);
DynamicParameters parameters;
foreach (var cartonInfo in cartonInfos)
{
//更改条码表状态
sql.Remove(0, sql.Length);
sql.Append("UPDATE sys_stock ");
sql.Append("SET status = @status, ");
sql.Append(" locate_id = @locateId, ");
sql.Append(" locate_name = @locateName, ");
sql.Append(" zone_id = @zoneId, ");
sql.Append(" zone_name = @zoneName, ");
sql.Append(" warehouse_id = @warehouseId, ");
sql.Append(" warehouse_name = @warehouseName, ");
sql.Append(" erp_warehouse = @erpWarehouse, ");
sql.Append(" update_userid = @updateUserid, ");
sql.Append(" update_time = @updateTime ");
sql.Append("WHERE carton_no = @cartonNo ");
parameters = new DynamicParameters();
parameters.Add("@cartonNo", cartonInfo.CartonNo);
parameters.Add("@status", WmsEnumUtil.StockStatus.SHIPPED);
parameters.Add("@locateId", 0);
parameters.Add("@locateName", string.Empty);
parameters.Add("@zoneId", 0);
parameters.Add("@zoneName", string.Empty);
parameters.Add("@warehouseId", 0);
parameters.Add("@warehouseName", string.Empty);
parameters.Add("@erpWarehouse", string.Empty);
parameters.Add("@updateUserid", 0);
parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
sqlList.Add(sql.ToString());
parametersList.Add(parameters);
// 2、更新事务表
//新增 sys_stock_trans 事务表
sql.Remove(0, sql.Length);
sql.Append("INSERT INTO [dbo].[sys_stock_trans] ");
sql.Append("( ");
sql.Append(" [trans_code],[carton_no],[part_id],[part_no],[part_spec],[src_locate_id],[src_locate_name],[dest_locate_id], ");
sql.Append(" [dest_locate_name],[old_qty],[new_qty],[trans_qty],[old_status],[new_status],[unit], ");
sql.Append(" [factory_id],[factory_code],[src_erp_warehouse],[dest_erp_warehouse],[src_warehouse_id],[src_warehouse_name], ");
sql.Append(" [dest_warehouse_id],[dest_warehouse_name],[src_zone_id],[src_zone_name],[dest_zone_id],[dest_zone_name],[enabled], ");
sql.Append(" [update_userid],[update_time], [create_userid],[create_time],[guid],ref_order_no ");
sql.Append(") ");
sql.Append("VALUES ");
sql.Append("(@trans_code, @carton_no, @part_id, @part_no, @part_spec, @src_locate_id, @src_locate_name, @dest_locate_id, ");
sql.Append(" @dest_locate_name, @old_qty, @new_qty, @trans_qty, @old_status, @new_status, @unit, ");
sql.Append(" @factory_id, @factory_code, @src_erp_warehouse, @dest_erp_warehouse, @src_warehouse_id, @src_warehouse_name, ");
sql.Append(" @dest_warehouse_id, @dest_warehouse_name, @src_zone_id, @src_zone_name, @dest_zone_id, @dest_zone_name, @enabled, ");
sql.Append(" @update_userid, @update_time, @create_userid, @create_time, @guid,@ref_order_no) ");
parameters = new DynamicParameters();
parameters.Add("@trans_code", (int)WmsEnumUtil.TransType.JIS_OUTSTOCK);
parameters.Add("@carton_no", cartonInfo.CartonNo);
parameters.Add("@part_id", cartonInfo.PartId);
parameters.Add("@part_no", cartonInfo.PartNo);
parameters.Add("@part_spec", cartonInfo.PartSpec);
parameters.Add("@src_locate_id", cartonInfo.LocateId);
parameters.Add("@src_locate_name", cartonInfo.LocateName);
parameters.Add("@dest_locate_id", 0);
parameters.Add("@dest_locate_name", string.Empty);
parameters.Add("@old_qty", cartonInfo.Qty);
parameters.Add("@new_qty", cartonInfo.Qty);
parameters.Add("@trans_qty", cartonInfo.Qty);
parameters.Add("@old_status", cartonInfo.Status);
parameters.Add("@new_status", (int)WmsEnumUtil.StockStatus.SHIPPED);
parameters.Add("@unit", cartonInfo.Unit);
parameters.Add("@factory_id", cartonInfo.FactoryId);
parameters.Add("@factory_code", cartonInfo.FactoryCode);
parameters.Add("@src_erp_warehouse", cartonInfo.ErpWarehouse);
parameters.Add("@dest_erp_warehouse", string.Empty);
parameters.Add("@src_warehouse_id", 0);
parameters.Add("@src_warehouse_name", string.Empty);
parameters.Add("@dest_warehouse_id", 0);
parameters.Add("@dest_warehouse_name", string.Empty);
parameters.Add("@src_zone_id", cartonInfo.ZoneId);
parameters.Add("@src_zone_name", cartonInfo.ZoneName);
parameters.Add("@dest_zone_id", 0);
parameters.Add("@dest_zone_name", string.Empty);
parameters.Add("@enabled", WmsEnumUtil.Enabled.Y.ToString());
parameters.Add("@update_userid", 0);
parameters.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
parameters.Add("@create_userid", 0);
parameters.Add("@create_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
parameters.Add("@guid", Guid.NewGuid());
parameters.Add("@ref_order_no", jisShips[0].OrderNo);
sqlList.Add(sql.ToString());
parametersList.Add(parameters);
// 3、更新待扣减表。
sql.Remove(0, sql.Length);
sql.Append("UPDATE dbo.mes_jis_shipping ");
sql.Append("SET ship_status = @shipStatus, ");
sql.Append(" err_msg = '', ");
sql.Append(" erp_warehouse = @erpWarehouse, ");
sql.Append(" update_userid = @updateUserid, ");
sql.Append(" update_time = @updateTime ");
sql.Append("WHERE serial_number = @serialNumber ");
parameters = new DynamicParameters();
parameters.Add("@shipStatus", (int)MesEnumUtil.JisShipStatus.SHIPPED);
parameters.Add("@erpWarehouse", cartonInfo.ErpWarehouse);
parameters.Add("@updateUserid", 0);
parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
parameters.Add("@serialNumber", cartonInfo.CartonNo);// jisShip.SerialNumber);
sqlList.Add(sql.ToString());
parametersList.Add(parameters);
}
foreach (var jisShip in jisShips)
{
// 4、写入JIS发运接口表
//WMS将每次发运的信息传递给SAP,SAP用于创建交货单。 JIS
sql.Remove(0, sql.Length);
sql.Append("INSERT INTO dbo.WMS_JIS(ZZ_WMSNUM,WERKS,LGORT,LFDAT,KUNNR,MATNR ");
sql.Append(" ,LFIMG,MEINS,ZPOST,ZTIME,SID,RECTIM,SYNFLG,GUID) ");
sql.Append(" VALUES(@ZZ_WMSNUM,@WERKS,@LGORT,@LFDAT,@KUNNR,@MATNR,@LFIMG ");
sql.Append(" ,@MEINS,@ZPOST,@ZTIME,@SID,@RECTIM,@SYNFLG,@GUID) ");
parameters = new DynamicParameters();
parameters.Add("@ZZ_WMSNUM", jisShip.OrderNo);//WMS发运单据号
parameters.Add("@WERKS", jisShip.FactoryCode);//发货工厂
parameters.Add("@LGORT", jisShip.ErpWarehouse);//发货库存地
parameters.Add("@LFDAT", DateTime.Now.ToString("yyyyMMdd"));//交货日期
parameters.Add("@KUNNR", jisShip.CustomerCode);//客户编码(送达方)
parameters.Add("@MATNR", jisShip.PartNo);//物料号
parameters.Add("@LFIMG", jisShip.Qty);//交货数量
parameters.Add("@MEINS", "件");//计量单位
parameters.Add("@ZPOST", DateTime.Now.ToString("yyyyMMdd"));//交易日期
parameters.Add("@ZTIME", DateTime.Now.ToString("HHmmss"));//交易时间
parameters.Add("@SID", Guid.NewGuid().ToString().Replace("-", ""));
parameters.Add("@RECTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
parameters.Add("@SYNFLG", "N");
parameters.Add("@GUID", Guid.NewGuid().ToString());
sqlList.Add(sql.ToString());
parametersList.Add(parameters);
}
return this.ExecuteTransaction(sqlList, parametersList);
}
}
}