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.

509 lines
29 KiB
C#

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;
namespace Estsh.Core.Wms.Repositories
{
public class FinishDeliveryRepository : BaseRepository<BaseEntity>, IFinishDeliveryRepository
{
public FinishDeliveryRepository(DapperDbContext _dapperDbContext) : base(_dapperDbContext)
{
}
public List<SysCustomer> GetCustomer(string cartonNo)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
StringBuilder SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append(" select * from sys_customer ");
SqlStringBuilder.Append(" where customer_code=@customer_code ");
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@customer_code", cartonNo);
List<SysCustomer> moveOrderList = dbConn.Query<SysCustomer>(SqlStringBuilder.ToString(), parameters).ToList();
return moveOrderList;
}
}
public List<SysStock> ProductionCode(string cartonNo, string loginId, string customer, string isComplete)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
StringBuilder SqlStringBuilder = new StringBuilder(1024);
if (isComplete == "True")
{
SqlStringBuilder.Append(" select * from sys_stock where tray_no = ( ");
SqlStringBuilder.Append(" select b.tray_no from mes_out_pdline as a left join sys_stock as b on a.serial_number=b.carton_no ");
SqlStringBuilder.Append(" where a.product_type= 10 and a.report_status = 20 and a.serial_number=@serial_number ) ");
}
else
{
SqlStringBuilder.Append(" select b.* from mes_out_pdline as a left join sys_stock as b on a.serial_number=b.carton_no ");
SqlStringBuilder.Append(" where a.product_type= 10 and a.report_status = 20 and a.serial_number=@serial_number ");
}
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@serial_number", cartonNo);
List<SysStock> ProductionStock = dbConn.Query<SysStock>(SqlStringBuilder.ToString(), parameters).ToList();
return ProductionStock;
}
}
public List<WmsOutstock> GetOutStock(string deliveryNo)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
StringBuilder SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append(" select * from wms_outstock where order_no=@order_no and enabled='Y' ");
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@order_no", deliveryNo);
List<WmsOutstock> wmsOutstocks = dbConn.Query<WmsOutstock>(SqlStringBuilder.ToString(), parameters).ToList();
return wmsOutstocks;
}
}
public List<SysEnum> GetEnums(int enum_value)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
StringBuilder SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append(" select * from sys_enum where enum_type ='sys_stock_status' and enum_value=@enum_value ");
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@enum_value", enum_value);
List<SysEnum> sysEnums = dbConn.Query<SysEnum>(SqlStringBuilder.ToString(), parameters).ToList();
return sysEnums;
}
}
public SetObjectDetail ProductionDelivery(List<SysStock> updateStock, string loginId, string customer, string deliveryNo)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
SetObjectDetail det = new SetObjectDetail();
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
StringBuilder SqlStringBuilder = new StringBuilder(1024);
#region 判断发运单 主表是否存在
SqlStringBuilder.Append(" select * from wms_outstock where order_no=@order_no and enabled='Y' ");
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@order_no", deliveryNo);
List<WmsOutstock> ProductionStock = dbConn.Query<WmsOutstock>(SqlStringBuilder.ToString(), parameters).ToList();
if (ProductionStock.Count > 0)
{
//存在
}
else
{
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("INSERT INTO dbo.wms_outstock(order_no,order_type,order_status,vendor_id,vendor_code,customer_id,customer_code,ref_order_no,factory_id,factory_code,enabled,create_userid,create_time,guid)");
SqlStringBuilder.Append("VALUES(@orderNo, @orderType, 10,@vendorId,@vendorCode,@customerId,@customerCode,@refOrderNo, @factoryId, @factoryCode, @enabled, @createUserid, CONVERT(varchar(50), GETDATE(), 21), newid()) ");
parameters = new DynamicParameters();
parameters.Add("@orderNo", deliveryNo);
parameters.Add("@orderType", (int)WmsEnumUtil.OutStockType.JIS_SHIPPING);
parameters.Add("@vendorId", 0);
parameters.Add("@vendorCode", "");
parameters.Add("@customerId", 0);
parameters.Add("@customerCode", customer);
parameters.Add("@refOrderNo", "");
parameters.Add("@factoryId", "");
parameters.Add("@factoryCode", "");
parameters.Add("@enabled", "Y");
parameters.Add("@createUserid", loginId);
sqlList.Add(SqlStringBuilder.ToString());
parametersList.Add(parameters);
}
#endregion
List<int> stockPartId = updateStock.Select(a => a.PartId).Distinct().ToList();
foreach (var partId in stockPartId)
{
List<SysStock> sysStocks = updateStock.Where(a => a.PartId == partId).ToList();
decimal QtySum = 0;
//更改STOCK 条码状态
foreach (var item in sysStocks)
{
QtySum += item.Qty;
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("update sys_stock set status=@status,update_userid=@updateUserid,update_time=@updateTime where ruid=@ruid ");
sqlList.Add(SqlStringBuilder.ToString());
parameters = new DynamicParameters();
parameters.Add("@status", (int)WmsEnumUtil.StockStatus.SHIPPED);
parameters.Add("@updateUserid", loginId);//更新人
parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//更新时间
parameters.Add("@ruid", item.Ruid);
parametersList.Add(parameters);
#region 事务表
//新增 sys_stock_trans 事务表
StringBuilder updateString4 = new StringBuilder(1024);
updateString4.Append(@" INSERT INTO[dbo].[sys_stock_trans]
([trans_code]
,[carton_no]
,[part_id]
,[part_no]
,[part_spec]
,[src_locate_id]
,[src_locate_name]
,[dest_locate_id]
,[dest_locate_name]
,[old_qty]
,[new_qty]
,[trans_qty]
,[old_status]
,[new_status]
,[old_qms_status]
,[new_qms_status]
,[unit]
,[factory_id]
,[factory_code]
,[src_erp_warehouse]
,[dest_erp_warehouse]
,[src_warehouse_id]
,[src_warehouse_name]
,[dest_warehouse_id]
,[dest_warehouse_name]
,[src_zone_id]
,[src_zone_name]
,[dest_zone_id]
,[dest_zone_name]
,[enabled]
,[update_userid]
,[update_time]
,[create_userid]
,[create_time]
,[guid])
VALUES (@trans_code,@carton_no,@part_id,@part_no,@part_spec,@src_locate_id ,@src_locate_name ,@dest_locate_id ,@dest_locate_name ,@old_qty
,@new_qty ,@trans_qty ,@old_status ,@new_status ,@old_qms_status ,@new_qms_status ,@unit ,@factory_id ,@factory_code ,@src_erp_warehouse ,@dest_erp_warehouse ,@src_warehouse_id ,@src_warehouse_name ,@dest_warehouse_id ,@dest_warehouse_name ,@src_zone_id ,@src_zone_name ,@dest_zone_id ,@dest_zone_name ,@enabled ,@update_userid ,@update_time ,@create_userid ,@create_time ,@guid )");
DynamicParameters updateStringparameters4 = new DynamicParameters();
updateStringparameters4.Add("@trans_code", (int)WmsEnumUtil.TransType.JIS_OUTSTOCK);
updateStringparameters4.Add("@carton_no", item.CartonNo);
updateStringparameters4.Add("@part_id", item.PartId);
updateStringparameters4.Add("@part_no", item.PartNo);
updateStringparameters4.Add("@part_spec", item.PartSpec);
updateStringparameters4.Add("@src_locate_id", item.LocateId);
updateStringparameters4.Add("@src_locate_name", item.LocateName);
updateStringparameters4.Add("@dest_locate_id", item.LocateId);
updateStringparameters4.Add("@dest_locate_name", item.LocateName);
updateStringparameters4.Add("@old_qty", item.Qty);
updateStringparameters4.Add("@new_qty", item.Qty);
updateStringparameters4.Add("@trans_qty", item.Qty);
updateStringparameters4.Add("@old_status", item.Status);
updateStringparameters4.Add("@new_status", (int)WmsEnumUtil.StockStatus.SHIPPED);
updateStringparameters4.Add("@old_qms_status", item.QmsStatus);
updateStringparameters4.Add("@new_qms_status", item.QmsStatus);
updateStringparameters4.Add("@unit", item.Unit);
updateStringparameters4.Add("@factory_id", item.FactoryId);
updateStringparameters4.Add("@factory_code", item.FactoryCode);
updateStringparameters4.Add("@src_erp_warehouse", item.ErpWarehouse);
updateStringparameters4.Add("@dest_erp_warehouse", item.ErpWarehouse);
updateStringparameters4.Add("@src_warehouse_id", item.WarehouseId);
updateStringparameters4.Add("@src_warehouse_name", item.WarehouseName);
updateStringparameters4.Add("@dest_warehouse_id", item.WarehouseId);
updateStringparameters4.Add("@dest_warehouse_name", item.WarehouseName);
updateStringparameters4.Add("@src_zone_id", item.ZoneId);
updateStringparameters4.Add("@src_zone_name", item.ZoneName);
updateStringparameters4.Add("@dest_zone_id", item.ZoneId);
updateStringparameters4.Add("@dest_zone_name", item.ZoneName);
updateStringparameters4.Add("@enabled", item.Enabled);
updateStringparameters4.Add("@update_userid", loginId);
updateStringparameters4.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
updateStringparameters4.Add("@create_userid", loginId);
updateStringparameters4.Add("@create_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
updateStringparameters4.Add("@guid", Guid.NewGuid());
sqlList.Add(updateString4.ToString());
parametersList.Add(updateStringparameters4);
#endregion
#region 成品出库 SN表
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append(@"INSERT INTO [dbo].[wms_outstock_sn]
([order_no]
,[item_no]
,[part_id]
,[part_no]
,[part_spec]
,[carton_no]
,[qty]
,[unit]
,[status]
,[factory_id]
,[factory_code]
,[enabled]
,[create_userid]
,[create_time]
,[update_userid]
,[update_time]
,[guid])
VALUES (@order_no,@item_no,@part_id,@part_no,@part_spec,@carton_no,@qty,@unit,@status,@factory_id,@factory_code,@enabled,@create_userid,@create_time,@update_userid,@update_time,@guid)");
parameters = new DynamicParameters();
parameters.Add("@order_no", deliveryNo);
parameters.Add("@item_no", 0);
parameters.Add("@part_id", item.PartId);
parameters.Add("@part_no", item.PartNo);
parameters.Add("@part_spec", item.PartSpec);
parameters.Add("@carton_no", item.CartonNo);
parameters.Add("@qty", item.Qty);
parameters.Add("@unit", item.Unit);
parameters.Add("@status", (int)WmsEnumUtil.MoveOrderSnStatus.BATCHED);
parameters.Add("@factory_id", item.FactoryId);
parameters.Add("@factory_code", item.FactoryCode);
parameters.Add("@enabled", "Y");
parameters.Add("@update_userid", loginId);
parameters.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
parameters.Add("@create_userid", loginId);
parameters.Add("@create_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
parameters.Add("@guid", Guid.NewGuid());
sqlList.Add(SqlStringBuilder.ToString());
parametersList.Add(parameters);
#endregion
}
#region 明细表新增
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append(" select * from wms_outstock_detail where order_no=@order_no and part_id=@part_id and enabled='Y' ");
parameters = new DynamicParameters();
parameters.Add("@order_no", deliveryNo);
parameters.Add("@part_id", sysStocks[0].PartId);
List<WmsOutstockDetail> WmsOutstockDetails = dbConn.Query<WmsOutstockDetail>(SqlStringBuilder.ToString(), parameters).ToList();
if (WmsOutstockDetails.Count > 0)
{
//存在 累加
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("update wms_outstock_detail set qty+=@qty, item_status=@item_status,update_userid=@updateUserid,update_time=@updateTime where order_no=@order_no and part_id=@part_id ");
sqlList.Add(SqlStringBuilder.ToString());
parameters = new DynamicParameters();
parameters.Add("@item_status", (int)WmsEnumUtil.MoveOrderDetailStatus.GENERATED);
parameters.Add("@updateUserid", loginId);//更新人
parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//更新时间
parameters.Add("@qty", QtySum);
parameters.Add("@order_no", deliveryNo);
parameters.Add("@part_id", sysStocks[0].PartId);
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,plan_date,plan_time,item_status");
SqlStringBuilder.Append(", src_warehouse_id, src_warehouse_name, src_zone_id, src_zone_name,src_locate_id,src_locate_name");
SqlStringBuilder.Append(", src_erp_warehouse, factory_id, factory_code, enabled, create_userid, create_time, guid)");
SqlStringBuilder.Append("VALUES(@orderNo, @itemNo, @partId, @partNo, @partSpec, @qty, @pickQty, @outQty, @unit, @planDate, @planTime, @itemStatus, @srcWarehouseId");
SqlStringBuilder.Append(", @srcWarehouseName, @srcZoneId, @srcZoneName,@srcLocateId,@srcLocateName, @srcErpWarehouse");
SqlStringBuilder.Append(", @factoryId, @factoryCode, @enabled, @createUserid, CONVERT(varchar(50), GETDATE(), 21), newid())");
sqlList.Add(SqlStringBuilder.ToString());
parameters = new DynamicParameters();
parameters.Add("@orderNo", deliveryNo);
parameters.Add("@itemNo", 0);
parameters.Add("@partId", sysStocks[0].PartId);
parameters.Add("@partNo", sysStocks[0].PartNo);
parameters.Add("@partSpec", sysStocks[0].PartSpec);
parameters.Add("@qty", QtySum);
parameters.Add("@pickQty", 0);
parameters.Add("@outQty", 0);
parameters.Add("@unit", sysStocks[0].Unit);
parameters.Add("@planDate", "");
parameters.Add("@planTime", "");
parameters.Add("@itemStatus", "20");
parameters.Add("@srcWarehouseId", 0);
parameters.Add("@srcWarehouseName", "");
parameters.Add("@srcZoneId", 0);
parameters.Add("@srcZoneName", "");
parameters.Add("@srcLocateId", 0);
parameters.Add("@srcLocateName", "");
parameters.Add("@srcErpWarehouse", sysStocks[0].ErpWarehouse);
parameters.Add("@factoryId", sysStocks[0].FactoryId);
parameters.Add("@factoryCode", sysStocks[0].FactoryCode);
parameters.Add("@enabled", "Y");
parameters.Add("@createUserid", loginId);
parametersList.Add(parameters);
}
#endregion
}
if (ExecuteTransaction(sqlList, parametersList))
{
det.type = "PASS";
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append(" select * from wms_outstock_detail where order_no=@order_no and enabled='Y' ");
parameters = new DynamicParameters();
parameters.Add("@order_no", deliveryNo);
List<WmsOutstockDetail> WmsOutstockDetails = dbConn.Query<WmsOutstockDetail>(SqlStringBuilder.ToString(), parameters).ToList();
det.wmsObjectDetail = WmsOutstockDetails.ConvertAll(s => (object)s);
}
else
{
det.type = "NO";
det.message = "处理失败,请重试!";
}
return det;
}
}
public List<WmsOutstock> GetFinishDeliveryOrderList(string orderNo)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
StringBuilder SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append(" select * from wms_outstock ");
SqlStringBuilder.Append("WHERE order_type=@order_type and enabled='Y' and order_status=@order_status ");
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@order_type", (int)WmsEnumUtil.OutStockType.JIS_SHIPPING);
parameters.Add("@order_status", (int)WmsEnumUtil.MoveOrderDetailStatus.CREATE);
List<WmsOutstock> wmsMoves = dbConn.Query<WmsOutstock>(SqlStringBuilder.ToString(), parameters).ToList();
return wmsMoves;
}
}
public bool SetFinishDeliveryOrderNoSubmit(string orderNo, string loginId)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
List<string> sqlList = new List<string>();
List<DynamicParameters> parametersList = new List<DynamicParameters>();
StringBuilder SqlStringBuilder = new StringBuilder(1024);
DynamicParameters parameters = new DynamicParameters();
SqlStringBuilder.Append(" select * from wms_outstock as a left join wms_outstock_detail as b on a.order_no=b.order_no where a.order_no=@order_no and a.enabled='Y' ");
parameters.Add("@order_no", orderNo);
List<WmsOutstockDetail> WmsOutstockDetails = dbConn.Query<WmsOutstockDetail>(SqlStringBuilder.ToString(), parameters).ToList();
foreach (var Detail in WmsOutstockDetails)
{
SqlStringBuilder = new StringBuilder(1024);
//WMS将每次发运的信息传递给SAP,SAP用于创建交货单。 JIS
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("INSERT INTO dbo.WMS_JIS(ZZ_WMSNUM,WERKS,LGORT,LFDAT,KUNNR,MATNR ");
SqlStringBuilder.Append(" ,LFIMG,MEINS,ZPOST,ZTIME,SID,RECTIM,SYNFLG,GUID) ");
SqlStringBuilder.Append(" VALUES(@ZZ_WMSNUM,@WERKS,@LGORT,@LFDAT,@KUNNR,@MATNR,@LFIMG ");
SqlStringBuilder.Append(" ,@MEINS,@ZPOST,@ZTIME,@SID,@RECTIM,@SYNFLG,@GUID) ");
parameters = new DynamicParameters();
parameters.Add("@ZZ_WMSNUM", orderNo + "1");//WMS发运单据号
parameters.Add("@WERKS", Detail.FactoryCode);//发货工厂
parameters.Add("@LGORT", Detail.SrcErpWarehouse);//发货库存地
parameters.Add("@LFDAT", DateTime.Now.ToString("yyyyMMdd"));//交货日期
parameters.Add("@KUNNR", Detail.CustomerCode);//客户编码(送达方)
parameters.Add("@MATNR", Detail.PartNo);//物料号
parameters.Add("@LFIMG", Detail.Qty);//交货数量
parameters.Add("@MEINS", Detail.Unit);//计量单位
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(SqlStringBuilder.ToString());
parametersList.Add(parameters);
}
#region 修改成品发运 主表、明细、SN
//主表
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("update wms_outstock set order_status=@order_status,create_userid=@updateUserid , create_time=@updateTime where order_no=@order_no and enabled='Y' ");
sqlList.Add(SqlStringBuilder.ToString());
parameters = new DynamicParameters();
parameters.Add("@order_status", (int)WmsEnumUtil.MoveOrderStatus.COMPLETED);
parameters.Add("@updateUserid", loginId);//更新人
parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//更新时间
parameters.Add("@order_no", orderNo);
parametersList.Add(parameters);
//明细表
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("update wms_outstock_detail set item_status=@item_status,create_userid=@updateUserid , create_time=@updateTime where order_no=@order_no and enabled='Y' ");
sqlList.Add(SqlStringBuilder.ToString());
parameters = new DynamicParameters();
parameters.Add("@item_status", (int)WmsEnumUtil.MoveOrderDetailStatus.COMPLETED);
parameters.Add("@updateUserid", loginId);//更新人
parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//更新时间
parameters.Add("@order_no", orderNo);
parametersList.Add(parameters);
//SN表
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("update wms_outstock_sn set status=@status,create_userid=@updateUserid , create_time=@updateTime where order_no=@order_no and enabled='Y' ");
sqlList.Add(SqlStringBuilder.ToString());
parameters = new DynamicParameters();
parameters.Add("@status", (int)WmsEnumUtil.MoveOrderSnStatus.PROCESSED);
parameters.Add("@updateUserid", loginId);//更新人
parameters.Add("@updateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));//更新时间
parameters.Add("@order_no", orderNo);
parametersList.Add(parameters);
#endregion
return ExecuteTransaction(sqlList, parametersList);
}
}
public List<WmsOutstockDetail> GetFinishDeliveryOrderListByOrderNo(string orderNo)
{
using (IDbConnection dbConn = dapperDbContext.GetDbConnection())
{
dbConn.Open();
StringBuilder SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append(" select a.customer_code,b.* from wms_outstock as a left join wms_outstock_detail as b on a.order_no = b.order_no ");
SqlStringBuilder.Append("WHERE a.enabled='Y' and a.order_no=@order_no ");
DynamicParameters parameters = new DynamicParameters();
parameters.Add("@order_no", orderNo);
List<WmsOutstockDetail> wmsMoves = dbConn.Query<WmsOutstockDetail>(SqlStringBuilder.ToString(), parameters).ToList();
return wmsMoves;
}
}
}
}