using HanHe.Utility.Data;
using HH.WMS.Common.External;
using HH.WMS.Entitys.Common;
using HH.WMS.Entitys.External;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HH.WMS.DAL.External
{
public class ExternalDAL : BaseDAL
{
#region 事务 执行存储过程(处理托盘、托盘产品关联、生成任务、设置任务号、更新货位状态)
///
/// 事务 执行存储过程(处理托盘、托盘产品关联、生成任务、设置任务号、更新货位状态)
///
///
///
///
///
///
public SqlExecuteResult InWorkAreaTransaction(TN_WM_TRANSPORT_TASKEntity transportTask, InWorkAreaEntity inWorkAreaEntity)
{
try
{
DbCommand cmd = DataAccess.GetStoredProcCommand("prc_inWorkArea");
//任务
DbParameter param = new SqlParameter("tableTransportTask", SqlDbType.Structured); //这个类型很关键
param.Value = GetWorkAreaTransport(transportTask);
cmd.Parameters.Add(param);
//物料集合
param = new SqlParameter("tableTrayItem", SqlDbType.Structured) { Value = GetInWorkAreaTrayItem(inWorkAreaEntity) };
cmd.Parameters.Add(param);
DataAccess.AddInParameter(cmd, "trayCode", ComDbType.STRING, inWorkAreaEntity.trayCode);
DataAccess.AddInParameter(cmd, "projectCode", ComDbType.STRING, inWorkAreaEntity.projectCode);
DataAccess.AddInParameter(cmd, "isTransport", DbType.Byte, inWorkAreaEntity.isTransport == "Y" ? Convert.ToByte(true) : Convert.ToByte(false));
//执行存储过程
var result = DataAccessExtensive.ExecuteSingleData(DataAccess, cmd, null);
return new SqlExecuteResult()
{
Success = Convert.ToInt32(result.ItemArray[0]) == 0,
Exception = new Exception(result.ItemArray[1].ToString())
};
}
catch (Exception ex)
{
return new SqlExecuteResult()
{
Success = false,
Exception = ex
};
}
}
#endregion
#region 任务(实体转DataTable)
///
/// 任务(实体转DataTable)
///
///
///
private DataTable GetWorkAreaTransport(TN_WM_TRANSPORT_TASKEntity transportTask)
{
DataTable tb = new DataTable();
tb.Columns.Add("CN_S_TASK_NO", typeof(string));
tb.Columns.Add("CN_S_CIR_OBJ", typeof(string));
tb.Columns.Add("CN_S_CIR_OBJ_CODE", typeof(string));
tb.Columns.Add("CN_S_START_BIT", typeof(string));
tb.Columns.Add("CN_S_END_BIT", typeof(string));
tb.Columns.Add("CN_S_PRO_CODE", typeof(string));
tb.Columns.Add("CN_S_STATE", typeof(string));
tb.Columns.Add("CN_S_BF_TASK_NO", typeof(string));
tb.Columns.Add("CN_S_AF_TASK_NO", typeof(string));
tb.Columns.Add("CN_S_STOCK_CODE", typeof(string));
tb.Columns.Add("CN_S_START_AREA", typeof(string));
tb.Columns.Add("CN_S_END_AREA", typeof(string));
tb.Columns.Add("CN_N_PRIORITY", typeof(int));
tb.Columns.Add("CN_S_CREATOR", typeof(string));
tb.Columns.Add("CN_S_CREATOR_BY", typeof(string));
tb.Columns.Add("CN_T_CREATE", typeof(DateTime));
tb.Columns.Add("CN_T_MODIFY", typeof(DateTime));
tb.Columns.Add("CN_S_REMARK", typeof(string));
tb.Columns.Add("CN_C_IS_AUTO", typeof(string));
tb.Columns.Add("CN_S_TASK_TYPE", typeof(string));
tb.Columns.Add("CN_C_START_IS_CONTROL_QTY", typeof(string));
tb.Columns.Add("CN_C_END_IS_CONTROL_QTY", typeof(string));
tb.Columns.Add("CN_S_START_AREA_TYPE", typeof(string));
tb.Columns.Add("CN_S_END_AREA_TYPE", typeof(string));
tb.Columns.Add("CN_S_START_CONTROL_INV", typeof(string));
tb.Columns.Add("CN_S_END_CONTROL_INV", typeof(string));
DataRow row = tb.NewRow();
row[0] = transportTask.CN_S_TASK_NO;
row[1] = transportTask.CN_S_CIR_OBJ;
row[2] = transportTask.CN_S_CIR_OBJ_CODE;
row[3] = transportTask.CN_S_START_BIT;
row[4] = transportTask.CN_S_END_BIT;
row[5] = transportTask.CN_S_PRO_CODE;
row[6] = transportTask.CN_S_STATE;
row[7] = transportTask.CN_S_BF_TASK_NO;
row[8] = transportTask.CN_S_AF_TASK_NO;
row[9] = transportTask.CN_S_STOCK_CODE;
row[10] = transportTask.CN_S_START_AREA;
row[11] = transportTask.CN_S_END_AREA;
row[12] = transportTask.CN_N_PRIORITY;
row[13] = transportTask.CN_S_CREATOR;
row[14] = transportTask.CN_S_CREATOR_BY;
row[15] = transportTask.CN_T_CREATE;
row[16] = transportTask.CN_T_MODIFY;
row[17] = transportTask.CN_S_REMARK;
row[18] = transportTask.CN_C_IS_AUTO;
row[19] = transportTask.CN_S_TASK_TYPE;
row[20] = transportTask.CN_C_START_IS_CONTROL_QTY;
row[21] = transportTask.CN_C_END_IS_CONTROL_QTY;
row[22] = transportTask.CN_S_START_AREA_TYPE;
row[23] = transportTask.CN_S_END_AREA_TYPE;
row[24] = transportTask.CN_S_START_CONTROL_INV;
row[25] = transportTask.CN_S_END_CONTROL_INV;
tb.Rows.Add(row);
return tb;
}
#endregion
#region 物料集合(实体转DataTable)
///
/// 物料集合(实体转DataTable)
///
///
///
private DataTable GetInWorkAreaTrayItem(InWorkAreaEntity inWorkAreaEntity)
{
DataTable tb = new DataTable();
tb.Columns.Add("itemCode", typeof(string));
tb.Columns.Add("itemName", typeof(string));
tb.Columns.Add("itemPackUnit", typeof(string));
tb.Columns.Add("qty", typeof(decimal));
tb.Columns.Add("productionDate", typeof(DateTime));
tb.Columns.Add("lotNo", typeof(string));
tb.Columns.Add("itemState", typeof(string));
if (inWorkAreaEntity.data == null)
{
tb.Rows.Add(tb.NewRow());
}
else
{
foreach (var itemEntity in inWorkAreaEntity.data)
{
DataRow row = tb.NewRow();
row[0] = itemEntity.itemCode;
row[1] = itemEntity.itemName;
row[2] = itemEntity.itemPackUnit;
row[3] = itemEntity.qty;
row[4] = itemEntity.productionDate ?? DateTime.Now;
row[5] = itemEntity.lotNo == null ? "" : itemEntity.lotNo;
row[6] = itemEntity.itemState == null ? "" : itemEntity.itemState;
tb.Rows.Add(row);
}
}
return tb;
}
#endregion
#region 事务 执行存储过程(处理托盘、托盘产品关联、生成任务、设置任务号、更新货位状态)
///
/// 事务 执行存储过程(处理托盘、托盘产品关联、生成任务、设置任务号、更新货位状态)
///
///
///
public SqlExecuteResult OutWorkAreaTransaction(ExecuteOutWorkAreaPara executeOutWorkAreaPara)
{
//TN_WM_TRANSPORT_TASKEntity transportTask, OutWorkAreaEntity outWorkAreaEntity, string startAreaClass, string endAreaClass
try
{
DbCommand cmd = DataAccess.GetStoredProcCommand("prc_outWorkArea");
//任务
DbParameter param = new SqlParameter("tableTransportTask", SqlDbType.Structured); //这个类型很关键
param.Value = GetWorkAreaTransport(executeOutWorkAreaPara.TransportList.FirstOrDefault());
cmd.Parameters.Add(param);
//add by liuying
DataAccess.AddInParameter(cmd, "projectCode", ComDbType.STRING, executeOutWorkAreaPara.OutWorkAreaEntity.projectCode);
DataAccess.AddInParameter(cmd, "isTransport", DbType.Byte, executeOutWorkAreaPara.OutWorkAreaEntity.IsTransport == "Y" ? Convert.ToByte(true) : Convert.ToByte(false));
//执行存储过程
var result = DataAccessExtensive.ExecuteSingleData(DataAccess, cmd, null);
return new SqlExecuteResult()
{
Success = Convert.ToInt32(result.ItemArray[0]) == 0,
Exception = new Exception(result.ItemArray[1].ToString())
};
}
catch (Exception ex)
{
return new SqlExecuteResult()
{
Success = false,
Exception = ex
};
}
}
#endregion
#region 执行出库
public void ExecuteOutWorkArea()
{
//创建任务
//更新起点、终点的货位扩展表
//修改库存
}
#endregion
#region 物料集合(实体转DataTable)
///
/// 物料集合(实体转DataTable)
///
///
///
private DataTable GetOutWorkAreaTrayItem(OutWorkAreaEntity inWorkAreaEntity)
{
DataTable tb = new DataTable();
tb.Columns.Add("itemCode", typeof(string));
tb.Columns.Add("itemName", typeof(string));
tb.Columns.Add("itemPackUnit", typeof(string));
tb.Columns.Add("qty", typeof(decimal));
tb.Columns.Add("steelWireCode", typeof(string));
tb.Columns.Add("glueStockCode", typeof(string));
tb.Columns.Add("productionDate", typeof(DateTime));
foreach (var itemEntity in inWorkAreaEntity.Data)
{
DataRow row = tb.NewRow();
row[0] = itemEntity.ItemCode;
row[1] = itemEntity.ItemName;
row[2] = "";
row[3] = itemEntity.UnitQty;
row[4] = "";
row[5] = "";
row[6] = DateTime.Now.ToString(CultureInfo.InvariantCulture);
tb.Rows.Add(row);
}
return tb;
}
#endregion
}
}