using HH.WMS.Common;
using HH.WMS.Common.External;
using HH.WMS.Entitys.Common;
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_AREA_QTYDAL : BaseDAL
{
#region 影响库区量表
public SqlExecuteResult AddAreaQty(List stockAreaQtyList, DbTransaction trans)
{
SqlExecuteResult result = new SqlExecuteResult();
foreach (var model in stockAreaQtyList)
{
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_STOCK_AREA='" + model.CN_S_STOCK_AREA + @"'
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_AREA_QTY " + sqlWhere + " )");
// strSql.Append("Update TN_WM_B_AREA_QTY SET CN_F_QUANTITY=CN_F_QUANTITY+" + model.CN_F_QUANTITY + ",CN_F_ALLOC_QTY=CN_F_ALLOC_QTY+" + model.CN_F_ALLOC_QTY + " " + sqlWhere + " ");
strSql.Append("Update TN_WM_B_AREA_QTY SET CN_F_QUANTITY=CN_F_QUANTITY+" + model.CN_F_QUANTITY + " " + sqlWhere + " ");
strSql.Append(" else ");
strSql.Append("insert into TN_WM_B_AREA_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_STOCK_AREA,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_STOCK_AREA,: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_STOCK_AREA", ComDbType.STRING, model.CN_S_STOCK_AREA);
DataAccess.AddInParameter(cmd, "CN_S_NOTE", ComDbType.STRING, model.CN_S_NOTE);
//Log.Info("AddAreaQty", "sql语句:" + strSql.ToString());
Log.Info(LogType.CheckTempService, "AddAreaQty!sql语句:" + strSql.ToString());
result = ExecuteCommand(cmd, trans);
if (!result.Success)
{
break;
}
}
return result;
}
//降暂存区库区量表
public SqlExecuteResult reduceAreaQty(List AreaQtyList, DbTransaction trans)
{
SqlExecuteResult result = new SqlExecuteResult();
foreach (var 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 + "' and CN_S_STOCK_AREA = '" + model.CN_S_STOCK_AREA + "' ";
strSql.Append(" if exists(select * from TN_WM_B_AREA_QTY " + sqlWhere + " and CN_F_QUANTITY-" + model.CN_F_QUANTITY + ">0)");
strSql.Append("Update TN_WM_B_AREA_QTY SET CN_F_QUANTITY=CN_F_QUANTITY-" + model.CN_F_QUANTITY + " " + sqlWhere + " ");
strSql.Append(" else ");
strSql.Append("DELETE FROM TN_WM_B_AREA_QTY " + sqlWhere + " ");
DbCommand cmd = DataAccess.GetSqlStringCommand(strSql.ToString());
result = ExecuteCommand(cmd, trans);
if (!result.Success)
{
break;
}
}
return result;
}
public SqlExecuteResult addAreaAllocQty(List trayCodes, string stockCode, string areaCode, DbTransaction trans)
{
var trayItemRelList = DALCreator.Create().GetListByTrays(trayCodes);
//增加库存分配数量
List stockAreaQtyList = new List();
foreach (var itemRel in trayItemRelList)
{
HH.WMS.Entitys.Basic.TN_WM_B_AREA_QTYEntity entityQty = new HH.WMS.Entitys.Basic.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;
stockAreaQtyList.Add(entityQty);
}
SqlExecuteResult result = new SqlExecuteResult();
foreach (HH.WMS.Entitys.Basic.TN_WM_B_AREA_QTYEntity model in stockAreaQtyList)
{
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 + "' and CN_S_STOCK_AREA = '" + model.CN_S_STOCK_AREA + "' ";
strSql.Append(" if exists(select * from TN_WM_B_AREA_QTY " + sqlWhere + " and CN_F_ALLOC_QTY-" + model.CN_F_ALLOC_QTY + ">0)");
strSql.Append("Update TN_WM_B_AREA_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 reduceAreaAllocQty(List trayCodes, string stockCode, string areaCode, DbTransaction trans)
{
var trayItemRelList = DALCreator.Create().GetListByTrays(trayCodes);
//增加库存分配数量
var stockAreaQtyList = new List();
foreach (var itemRel in trayItemRelList)
{
var entityQty = new HH.WMS.Entitys.Basic.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;
stockAreaQtyList.Add(entityQty);
}
SqlExecuteResult result = new SqlExecuteResult();
foreach (var model in stockAreaQtyList)
{
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 + "' and CN_S_STOCK_AREA = '" + model.CN_S_STOCK_AREA + "' ";
strSql.Append(" if exists(select * from TN_WM_B_AREA_QTY " + sqlWhere + " and CN_F_ALLOC_QTY-" + model.CN_F_ALLOC_QTY + ">0)");
strSql.Append("Update TN_WM_B_AREA_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
}
}