using HanHe.Utility.Data;
using HH.WMS.Entitys;
using HH.WMS.Entitys.Check;
using HH.WMS.Entitys.Common;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.OracleClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HH.WMS.DAL.Check
{
public class TN_WM_CHECK_MSTDAL : DapperBaseDAL
{
#region 获取分页列表
///
/// 获取分页列表
///
///
///
/// [HanHe(lt)] CREATED 2018/7/3
public DataTable GetDataTable(dynamic obj)
{
var isFirstLevelOrg = obj.Value("isFirstLevelOrg");
var currentOrgCode = obj.Value("currentOrgCode");
string sqlWhere = obj.sqlWhere;
if (!isFirstLevelOrg)
{
//sqlWhere += " AND CN_S_NEXT_ORG_CODE='" + currentOrgCode + "' ";
sqlWhere += " AND ((CN_S_CURR_ORG_CODE='" + currentOrgCode + "' or CN_S_NEXT_ORG_CODE='" + currentOrgCode + "' ) OR CN_S_NEXT_ORG_CODE='') ";
}
DbCommand cmd = DataAccess.GetStoredProcCommand("prc_query");
this.DataAccess.AddInParameter(cmd, "TableName", ComDbType.CHAR, "TN_WM_CHECK_MST");
this.DataAccess.AddInParameter(cmd, "WhereStr", ComDbType.CHAR, sqlWhere);
this.DataAccess.AddInParameter(cmd, "OrderByStr", ComDbType.CHAR, obj.OrdeBy);
this.DataAccess.AddInParameter(cmd, "PageSize", ComDbType.INT, obj.pageSize);
this.DataAccess.AddInParameter(cmd, "PageIndex", ComDbType.INT, obj.pageIndex);
this.DataAccess.AddOutParameter(cmd, "TotalPage", ComDbType.INT, 4);
this.DataAccess.AddOutParameter(cmd, "TotalRecord", ComDbType.INT, 4);
//如果是oracle 增加特性
if (!string.IsNullOrEmpty(Now_dbType) && Now_dbType.Equals("ORACLE"))
{
//处理游标类型 因DbType无游标类型,游标类型单独处理
ComDbType.AddOrcOutParameter(cmd, "v_cur", OracleType.Cursor);
}
try
{
//获得列表
DataTable dt = DataAccessExtensive.ExecuteDataTable(this.DataAccess, cmd);
obj.PageCount = Convert.ToInt32(this.DataAccess.GetParameterValue(cmd, "TotalRecord"));
return dt;
}
catch (Exception)
{
throw;
}
}
///
/// 获取分页列表
///
///
///
/// [HanHe(lt)] CREATED 2018/7/3
public DataTable GetDataTable(string sqlWhere, string OrdeBy, int pageSize, int pageIndex)
{
DbCommand cmd = DataAccess.GetStoredProcCommand("prc_query");
this.DataAccess.AddInParameter(cmd, "TableName", ComDbType.CHAR, "TN_WM_CHECK_MST");
this.DataAccess.AddInParameter(cmd, "WhereStr", ComDbType.CHAR, sqlWhere);
this.DataAccess.AddInParameter(cmd, "OrderByStr", ComDbType.CHAR, OrdeBy);
this.DataAccess.AddInParameter(cmd, "PageSize", ComDbType.INT, pageSize);
this.DataAccess.AddInParameter(cmd, "PageIndex", ComDbType.INT, pageIndex);
this.DataAccess.AddOutParameter(cmd, "TotalPage", ComDbType.INT, 4);
this.DataAccess.AddOutParameter(cmd, "TotalRecord", ComDbType.INT, 4);
//如果是oracle 增加特性
if (!string.IsNullOrEmpty(Now_dbType) && Now_dbType.Equals("ORACLE"))
{
//处理游标类型 因DbType无游标类型,游标类型单独处理
ComDbType.AddOrcOutParameter(cmd, "v_cur", OracleType.Cursor);
}
try
{
//获得列表
DataTable dt = DataAccessExtensive.ExecuteDataTable(this.DataAccess, cmd);
//obj.PageCount = Convert.ToInt32(this.DataAccess.GetParameterValue(cmd, "TotalRecord"));
return dt;
}
catch (Exception)
{
throw;
}
}
#endregion
#region 查询盘点业务主表
///
/// 查询盘点业务主表
///
/// 查询条件
///
/// [HanHe(lt)] CREATED 2018/7/3
public DataTable Getentity(string sqlwhere)
{
string sql = "SELECT * FROM TN_WM_CHECK_MST WHERE 1=1 {0}";
sql = string.Format(sql, sqlwhere);
DbCommand cmd = DataAccess.GetSqlStringCommand(sql);
return DataAccessExtensive.ExecuteDataTable(this.DataAccess, cmd);
}
#endregion
///
/// 获取货位物料信息
///
/// 查询条件
///
/// [HanHe(lt)] CREATED 2018/7/12
public List Getlist(string sqlwhere, string type)
{
var sql = "";
if (type == "物料盘点")
{
sql = @"select * from (SELECT a.CN_S_STOCK_CODE,a.CN_S_STOCK_AREA,b.CN_S_ITEM_CODE,b.CN_S_ITEM_NAME,CN_S_ITEM_STATE,'' AS CN_S_LOCATION_CODE,'' as CN_S_LOT_NO,b.CN_S_OWNER,b.CN_S_MODEL,b.CN_S_FIGURE_NO,SUM(CN_F_QUANTITY) AS CN_F_QUANTITY, CN_S_MEASURE_UNIT FROM dbo.tn_wm_b_tray_location AS a LEFT JOIN TN_WM_B_TRAY_ITEM_MST AS b ON a.CN_S_TRAY_CODE=b.CN_S_TRAY_CODE
GROUP BY a.CN_S_STOCK_CODE,a.CN_S_STOCK_AREA,b.CN_S_ITEM_CODE,b.CN_S_ITEM_NAME,CN_S_ITEM_STATE,b.CN_S_OWNER,b.CN_S_MODEL,b.CN_S_FIGURE_NO,CN_S_MEASURE_UNIT) b {0} ";
}
else
{
sql = @"select * from (SELECT a.CN_S_STOCK_CODE,a.CN_S_STOCK_AREA,a.CN_S_LOCATION_CODE,b.CN_S_ITEM_CODE,b.CN_S_ITEM_NAME,CN_S_ITEM_STATE,'' as CN_S_LOT_NO,b.CN_S_OWNER,b.CN_S_MODEL,b.CN_S_FIGURE_NO,ISNULL(CN_F_QUANTITY,0) AS CN_F_QUANTITY, CN_S_MEASURE_UNIT FROM
dbo.tn_wm_b_tray_location AS a
LEFT JOIN TN_WM_B_TRAY_ITEM_MST AS b ON a.CN_S_TRAY_CODE=b.CN_S_TRAY_CODE
) b {0} ";
}
sql = string.Format(sql, sqlwhere);
DbCommand cmd = DataAccess.GetSqlStringCommand(sql);
return DataAccessExtensive.ExecuteListEntity(this.DataAccess, cmd, SetEntity);
}
///
/// 设置实体的各列
///
private void SetEntity(TN_WM_CHECK_DTLEntity entity, IDataReader reader)
{
SetEntityUti(entity, "CN_S_STOCK_CODE", "CN_S_STOCK_CODE", reader);
SetEntityUti(entity, "CN_S_STOCK_AREA", "CN_S_STOCK_AREA", reader);
SetEntityUti(entity, "CN_S_ITEM_CODE", "CN_S_ITEM_CODE", reader);
SetEntityUti(entity, "CN_S_ITEM_NAME", "CN_S_ITEM_NAME", reader);
SetEntityUti(entity, "CN_S_ITEM_STATE", "CN_S_ITEM_STATE", reader);
SetEntityUti(entity, "CN_S_LOT_NO", "CN_S_LOT_NO", reader);
SetEntityUti(entity, "CN_S_OWNER", "CN_S_OWNER", reader);
SetEntityUti(entity, "CN_S_MODEL", "CN_S_MODEL", reader);
SetEntityUti(entity, "CN_S_FIGURE_NO", "CN_S_FIGURE_NO", reader);
SetEntityUti(entity, "CN_F_QUANTITY", "CN_F_QUANTITY", reader);
SetEntityUti(entity, "CN_S_MEASURE_UNIT", "CN_S_MEASURE_UNIT", reader);
SetEntityUti(entity, "CN_S_LOCATION_CODE", "CN_S_LOCATION_CODE", reader);
}
#region 根据盘点单号修改状态
///
/// 根据盘点单号修改状态
///
///
///
///
/// [HanHe(lt)] CREATED 2018/7/12
public SqlExecuteResult UpdateStateByNo(string CN_S_OP_NO, string CN_S_STATE, DbTransaction trans)
{
string sql = "UPDATE dbo.tn_wm_check_mst SET CN_S_STATE='{0}' WHERE CN_S_OP_NO IN ('{1}')";
sql = string.Format(sql, CN_S_STATE, CN_S_OP_NO);
DbCommand cmd = DataAccess.GetSqlStringCommand(sql);
return ExecuteCommand(cmd, trans);
}
#endregion
///
/// 更新数据
///
/// [HanHe(lt)] CREATED 2018/7/3
public OperateResult UpdateMstByOpNo(string state, string sqlwhere, IDbTransaction trans)
{
string sql = "update tn_wm_check_mst set CN_S_STATE='{0}' {1}";
sql = string.Format(sql, state, sqlwhere);
DbCommand cmd = DataAccess.GetSqlStringCommand(sql);
return ExecuteTranSql(sql, null, trans);
}
#region 空货位 更新货位拓展表
///
/// 更新货位拓展表
///
///
/// [HanHe(lt)] CREATED 2018/12/20
public OperateResult UpdateLocationExt(string locationCodes, IDbTransaction trans)
{
string sql = @" UPDATE tn_wm_b_location_ext SET CN_S_USE_STATE='空' FROM tn_wm_b_location_ext AS a WITH (NOLOCK)
LEFT JOIN dbo.tn_wm_b_tray_location AS b WITH (NOLOCK) ON a.CN_S_LOCATION_CODE=b.CN_S_LOCATION_CODE
WHERE a.CN_S_LOCATION_CODE IN ('" + locationCodes + "') AND b.CN_S_LOCATION_CODE IS NULL";
return ExecuteTranSql(sql, null, trans);
}
#endregion
#region 空货位 更新货位拓展表
///
/// 更新货位拓展表
///
///
/// [HanHe(lt)] CREATED 2018/12/20
public OperateResult DeleteTrayLocation(string trayCodes, IDbTransaction trans)
{
string sql = @" DELETE tn_wm_b_tray_location FROM tn_wm_b_tray_location AS a WITH (NOLOCK)
LEFT JOIN TN_WM_B_TRAY_ITEM_MST AS b WITH (NOLOCK) ON b.CN_S_TRAY_CODE = a.CN_S_TRAY_CODE
INNER JOIN dbo.tn_wm_tray_info AS c WITH (NOLOCK) ON c.CN_S_TRAY_CODE = a.CN_S_TRAY_CODE
WHERE CN_S_TRAY_TYPE='虚拟托盘' AND a.CN_S_TRAY_CODE IN ('" + trayCodes + "') AND b.CN_S_TRAY_CODE IS NULL";
return ExecuteTranSql(sql, null, trans);
}
#endregion
///
/// 根据盘点单号获取盘点明细
///
///
///
/// [HanHe(dbs)] CREATED 2019/3/28
public List GetCheckList(string opNo,string type)
{
string sql = string.Empty;
if (type.Equals("货位盘点"))
{
sql = @"select b.CN_S_STOCK_AREA,a.CN_S_LOCATION_CODE,c.CN_S_TRAY_CODE,c.CN_S_TRAY_GRID,c.CN_S_ITEM_CODE,c.CN_S_ITEM_NAME,
c.CN_S_MODEL,c.CN_S_FIGURE_NO,c.CN_S_ITEM_STATE,c.CN_S_MEASURE_UNIT,c.CN_S_OWNER,sum(d.CN_F_QUANTITY) CN_F_QUANTITY,
d.CN_S_PACKING_UNIT,d.CN_F_PACKING_QTY
from tn_wm_check_dtl a
join tn_wm_b_tray_location b on a.CN_S_LOCATION_CODE=b.CN_S_LOCATION_CODE
left join TN_WM_B_TRAY_ITEM_MST c on b.CN_S_TRAY_CODE=c.CN_S_TRAY_CODE
join TN_WM_B_TRAY_ITEM_DTL d on c.CN_GUID=d.CN_PARENT_GUID
where CN_S_OP_NO=@CN_S_OP_NO
group by b.CN_S_STOCK_AREA,a.CN_S_LOCATION_CODE,c.CN_S_TRAY_CODE,c.CN_S_TRAY_GRID,c.CN_S_ITEM_CODE,c.CN_S_ITEM_NAME,
c.CN_S_MODEL,c.CN_S_FIGURE_NO,c.CN_S_ITEM_STATE,c.CN_S_MEASURE_UNIT,c.CN_S_OWNER,
d.CN_S_PACKING_UNIT,d.CN_F_PACKING_QTY";
}
else if (type.Equals("物料盘点"))
{
sql = @"select
d.CN_S_STOCK_AREA,d.CN_S_LOCATION_CODE,d.CN_S_TRAY_CODE,b.CN_S_TRAY_GRID,b.CN_S_ITEM_CODE,b.CN_S_ITEM_NAME,b.CN_S_MODEL,
b.CN_S_FIGURE_NO,b.CN_S_ITEM_STATE,b.CN_S_MEASURE_UNIT,b.CN_S_OWNER,sum(c.CN_F_QUANTITY) CN_F_QUANTITY,c.CN_S_PACKING_UNIT,c.CN_F_PACKING_QTY
from tn_wm_check_dtl a join TN_WM_B_TRAY_ITEM_MST b on a.CN_S_ITEM_CODE=b.CN_S_ITEM_CODE
and a.CN_S_ITEM_STATE=b.CN_S_ITEM_STATE and a.CN_S_OWNER=b.CN_S_OWNER
join TN_WM_B_TRAY_ITEM_DTL c on b.CN_GUID=c.CN_PARENT_GUID
join tn_wm_b_tray_location d on b.CN_S_TRAY_CODE=d.CN_S_TRAY_CODE where CN_S_OP_NO=@CN_S_OP_NO
group by d.CN_S_STOCK_AREA,d.CN_S_LOCATION_CODE,d.CN_S_TRAY_CODE,b.CN_S_TRAY_GRID,b.CN_S_ITEM_CODE,b.CN_S_ITEM_NAME,b.CN_S_MODEL,
b.CN_S_FIGURE_NO,b.CN_S_ITEM_STATE,b.CN_S_MEASURE_UNIT,b.CN_S_OWNER,c.CN_S_PACKING_UNIT,c.CN_F_PACKING_QTY";
}
return ExecuteQuery(sql, new { CN_S_OP_NO = opNo });
}
}
}