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 } }