using HanHe.Utility.Data;
using HH.WMS.Entitys.Basic;
using HH.WMS.Entitys.Common;
using HH.WMS.Entitys.External;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HH.WMS.DAL.External
{
///
/// 库存数量数据处理类
///
/// [HanHe(HHC)] CREATED 2018/3/5
public class TN_WM_B_STOCK_QTYDAL : BaseDAL
{
#region 根据Guid获取
///
/// 根据Guid获取
///
///
///
public List GetStockByGuid(List guidList)
{
string sql = @"SELECT * FROM TN_WM_B_STOCK_QTY WHERE CN_GUID IN ('" + string.Join("','", guidList) + "')";
DbCommand cmd = DataAccess.GetSqlStringCommand(sql);
return DataAccessExtensive.ExecuteListEntity(this.DataAccess, cmd,
(e, r) =>
{
SetEntityUti(e, "CN_GUID", "CN_GUID", r); //GUID
SetEntityUti(e, "CN_F_QUANTITY", "CN_F_QUANTITY", r); //库存数量
SetEntityUti(e, "CN_F_PLANNED_QTY", "CN_F_PLANNED_QTY", r); //在单量
SetEntityUti(e, "CN_F_ALLOC_QTY", "CN_F_ALLOC_QTY", r); //分配量
});
}
#endregion
#region 影响仓库量表
public SqlExecuteResult AddStockQty(List stockQtyList, DbTransaction trans)
{
SqlExecuteResult result = new SqlExecuteResult();
foreach (TN_WM_B_AREA_QTYEntity model in stockQtyList)
{
StringBuilder strSql = new StringBuilder();
string sqlWhere = " Where CN_S_STOCK_CODE='" + model.CN_S_STOCK_CODE + @"'
and CN_S_ITEM_CODE='" + model.CN_S_ITEM_CODE + @"'
and CN_S_ITEM_STATE='" + model.CN_S_ITEM_STATE + @"'
and CN_S_LOT_NO='" + model.CN_S_LOT_NO + "' ";
strSql.Append(" if exists(select * from TN_WM_B_STOCK_QTY " + sqlWhere + " )");
strSql.Append("Update TN_WM_B_STOCK_QTY SET CN_F_QUANTITY=CN_F_QUANTITY+" + model.CN_F_QUANTITY + " " + sqlWhere + " ");
strSql.Append(" else ");
strSql.Append("insert into TN_WM_B_STOCK_QTY(");
strSql.Append("CN_GUID,CN_S_OWNER,CN_S_ITEM_CODE,CN_S_ITEM_NAME,CN_S_ITEM_STATE,CN_S_LOT_NO,CN_S_STOCK_CODE,CN_F_QUANTITY,CN_F_ALLOC_QTY,CN_F_PLANNED_QTY,CN_S_NOTE)");
strSql.Append(" values (");
strSql.Append(":CN_GUID,:CN_S_OWNER,:CN_S_ITEM_CODE,:CN_S_ITEM_NAME,:CN_S_ITEM_STATE,:CN_S_LOT_NO,:CN_S_STOCK_CODE,:CN_F_QUANTITY,:CN_F_ALLOC_QTY,:CN_F_PLANNED_QTY,:CN_S_NOTE)");
DbCommand cmd = DataAccess.GetSqlStringCommand(strSql.ToString());
DataAccess.AddInParameter(cmd, "CN_GUID", ComDbType.STRING, model.CN_GUID);
DataAccess.AddInParameter(cmd, "CN_S_OWNER", ComDbType.STRING, model.CN_S_OWNER);
DataAccess.AddInParameter(cmd, "CN_S_ITEM_CODE", ComDbType.STRING, model.CN_S_ITEM_CODE);
DataAccess.AddInParameter(cmd, "CN_S_ITEM_NAME", ComDbType.STRING, model.CN_S_ITEM_NAME);
DataAccess.AddInParameter(cmd, "CN_S_ITEM_STATE", ComDbType.STRING, model.CN_S_ITEM_STATE);
DataAccess.AddInParameter(cmd, "CN_S_LOT_NO", ComDbType.STRING, model.CN_S_LOT_NO);
DataAccess.AddInParameter(cmd, "CN_S_STOCK_CODE", ComDbType.STRING, model.CN_S_STOCK_CODE);
DataAccess.AddInParameter(cmd, "CN_F_QUANTITY", ComDbType.DECIMAL, model.CN_F_QUANTITY);
DataAccess.AddInParameter(cmd, "CN_F_ALLOC_QTY", ComDbType.DECIMAL, model.CN_F_ALLOC_QTY);
DataAccess.AddInParameter(cmd, "CN_F_PLANNED_QTY", ComDbType.DECIMAL, model.CN_F_PLANNED_QTY);
DataAccess.AddInParameter(cmd, "CN_S_NOTE", ComDbType.STRING, model.CN_S_NOTE);
result = ExecuteCommand(cmd, trans);
if (!result.Success)
{
break;
}
}
return result;
}
//降暂仓库量表
public SqlExecuteResult reduceStockQty(List AreaQtyList, DbTransaction trans)
{
SqlExecuteResult result = new SqlExecuteResult();
foreach (TN_WM_B_AREA_QTYEntity model in AreaQtyList)
{
StringBuilder strSql = new StringBuilder();
string sqlWhere = " Where CN_S_STOCK_CODE='" + model.CN_S_STOCK_CODE + @"'
and CN_S_ITEM_CODE='" + model.CN_S_ITEM_CODE + @"'
and CN_S_ITEM_STATE='" + model.CN_S_ITEM_STATE + @"'
and CN_S_LOT_NO='" + model.CN_S_LOT_NO + "'";
strSql.Append(" if exists(select * from TN_WM_B_STOCK_QTY " + sqlWhere + " and CN_F_QUANTITY-" + model.CN_F_QUANTITY + ">0)");
strSql.Append("Update TN_WM_B_STOCK_QTY SET CN_F_QUANTITY=CN_F_QUANTITY-" + model.CN_F_QUANTITY + " " + sqlWhere + " ");
strSql.Append(" else ");
strSql.Append("DELETE FROM TN_WM_B_STOCK_QTY " + sqlWhere + " ");
DbCommand cmd = DataAccess.GetSqlStringCommand(strSql.ToString());
result = ExecuteCommand(cmd, trans);
if (!result.Success)
{
break;
}
}
return result;
}
public SqlExecuteResult AddStockAllocQty(List trayCodes, string stockCode, string areaCode, DbTransaction trans)
{
var trayItemRelList = DALCreator.Create().GetListByTrays(trayCodes);
//增加库存分配数量
List stockQtyList = new List();
foreach (TN_WM_B_TRAY_ITEM_RELEntity itemRel in trayItemRelList)
{
TN_WM_B_AREA_QTYEntity entityQty = new TN_WM_B_AREA_QTYEntity();
entityQty.CN_S_ITEM_STATE = itemRel.CN_S_ITEM_STATE;
entityQty.CN_F_QUANTITY = itemRel.CN_F_QUANTITY;
entityQty.CN_GUID = Guid.NewGuid().ToString();
entityQty.CN_S_ITEM_CODE = itemRel.CN_S_ITEM_CODE;
entityQty.CN_S_ITEM_NAME = itemRel.CN_S_ITEM_NAME;
entityQty.CN_S_LOT_NO = itemRel.CN_S_PRODUCTION_BATCH;
entityQty.CN_S_OWNER = itemRel.CN_S_OWNER;
entityQty.CN_S_STOCK_AREA = areaCode;
entityQty.CN_S_STOCK_CODE = stockCode;
stockQtyList.Add(entityQty);
}
SqlExecuteResult result = new SqlExecuteResult();
foreach (TN_WM_B_AREA_QTYEntity model in stockQtyList)
{
StringBuilder strSql = new StringBuilder();
string sqlWhere = " Where CN_S_STOCK_CODE='" + model.CN_S_STOCK_CODE + @"'
and CN_S_ITEM_CODE='" + model.CN_S_ITEM_CODE + @"'
and CN_S_ITEM_STATE='" + model.CN_S_ITEM_STATE + @"'
and CN_S_LOT_NO='" + model.CN_S_LOT_NO + "' ";
strSql.Append(" if exists(select * from TN_WM_B_STOCK_QTY " + sqlWhere + " )");
strSql.Append("Update TN_WM_B_STOCK_QTY SET CN_F_ALLOC_QTY=CN_F_ALLOC_QTY+" + model.CN_F_ALLOC_QTY + " " + sqlWhere + " ");
DbCommand cmd = DataAccess.GetSqlStringCommand(strSql.ToString());
result = ExecuteCommand(cmd, trans);
if (!result.Success)
{
break;
}
}
return result;
}
//降暂仓库量表
public SqlExecuteResult reduceStockAllocQty(List trayCodes, string stockCode, string areaCode, DbTransaction trans)
{
var trayItemRelList = DALCreator.Create().GetListByTrays(trayCodes);
//增加库存分配数量
List stockQtyList = new List();
foreach (TN_WM_B_TRAY_ITEM_RELEntity itemRel in trayItemRelList)
{
TN_WM_B_AREA_QTYEntity entityQty = new TN_WM_B_AREA_QTYEntity();
entityQty.CN_S_ITEM_STATE = itemRel.CN_S_ITEM_STATE;
entityQty.CN_F_QUANTITY = itemRel.CN_F_QUANTITY;
entityQty.CN_GUID = Guid.NewGuid().ToString();
entityQty.CN_S_ITEM_CODE = itemRel.CN_S_ITEM_CODE;
entityQty.CN_S_ITEM_NAME = itemRel.CN_S_ITEM_NAME;
entityQty.CN_S_LOT_NO = itemRel.CN_S_PRODUCTION_BATCH;
entityQty.CN_S_OWNER = itemRel.CN_S_OWNER;
entityQty.CN_S_STOCK_AREA = areaCode;
entityQty.CN_S_STOCK_CODE = stockCode;
stockQtyList.Add(entityQty);
}
SqlExecuteResult result = new SqlExecuteResult();
foreach (TN_WM_B_AREA_QTYEntity model in stockQtyList)
{
StringBuilder strSql = new StringBuilder();
string sqlWhere = " Where CN_S_STOCK_CODE='" + model.CN_S_STOCK_CODE + @"'
and CN_S_ITEM_CODE='" + model.CN_S_ITEM_CODE + @"'
and CN_S_ITEM_STATE='" + model.CN_S_ITEM_STATE + @"'
and CN_S_LOT_NO='" + model.CN_S_LOT_NO + "'";
strSql.Append(" if exists(select * from TN_WM_B_STOCK_QTY " + sqlWhere + " and CN_F_ALLOC_QTY-" + model.CN_F_ALLOC_QTY + ">0)");
strSql.Append("Update TN_WM_B_STOCK_QTY SET CN_F_ALLOC_QTY=CN_F_ALLOC_QTY-" + model.CN_F_ALLOC_QTY + " " + sqlWhere + " ");
DbCommand cmd = DataAccess.GetSqlStringCommand(strSql.ToString());
result = ExecuteCommand(cmd, trans);
if (!result.Success)
{
break;
}
}
return result;
}
#endregion
}
}