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