using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using System.ServiceModel;
using System.Linq;
using SiaSun.LMS.Model;
using System.Net;
using System.Reflection;
namespace SiaSun.LMS.Implement
{
[ServiceBehavior(IncludeExceptionDetailInFaults = true,InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple,MaxItemsInObjectGraph=int.MaxValue)]
public partial class CellBase : SiaSun.LMS.Implement.S_BaseService, SiaSun.LMS.Interface.I_CellService
{
public CellBase()
{
}
public SiaSun.LMS.Model.WH_CELL GetModel(int CELL_ID)
{
return _P_WH_CELL.GetModel(CELL_ID);
}
/// 获得库房
/// 获得库房
///
/// 库房编码
/// 返回值
public DataTable WAREHOUSE_GetList(int USER_ID,string WAREHOUSE_TYPE)
{
DataTable dt = this.GetList(string.Format(@"SELECT WAREHOUSE_ID,WAREHOUSE_NAME FROM WH_WAREHOUSE
WHERE {0} {1}" ,
USER_ID >=0 ? "1=1": string.Format(@"(WAREHOUSE_ID IN(SELECT RELATION_ID2
FROM V_SYS_RELATION WHERE RELATION_CODE='SYS_USER-WH_WAREHOUSE'
AND RELATION_ID1= {0}))",USER_ID),
WAREHOUSE_TYPE== string.Empty?string.Empty:string.Format( "AND WAREHOUSE_TYPE = '{0}'",WAREHOUSE_TYPE) ));
return dt;
}
/// 获得库区
/// 获得库区
///
/// 库房编号
/// 库区类型
/// 返回值
public DataTable AREA_GetList(int WAREHOUSE_ID, string AREA_TYPE)
{
string sSQL = "SELECT AREA_ID,AREA_CODE,AREA_NAME,AREA_TYPE FROM WH_AREA WHERE AREA_FLAG='1' {0} {1}";
DataTable dt = this.GetList(string.Format(sSQL,
(0 == WAREHOUSE_ID) ? string.Empty : string.Format(" AND WAREHOUSE_ID = {0}", WAREHOUSE_ID.ToString()),
string.IsNullOrEmpty(AREA_TYPE) ? string.Empty : string.Format(" AND AREA_TYPE = '{0}'", AREA_TYPE)));
return dt;
}
/// 获得排
/// 获得排
///
/// 库房编号
/// 库区编号
/// 存储区编号
/// 货位类型
/// 出入库方向
///
public DataTable CELL_Z_GetList(int AREA_ID)
{
string sSQL = "SELECT * FROM V_WH_CELL_Z WHERE 1=1 {0} ORDER BY CELL_Z";
DataTable dt = this.GetList(string.Format(sSQL,
(0 == AREA_ID) ? string.Empty : string.Format(" AND AREA_ID = {0}", AREA_ID.ToString())
));
return dt;
}
public IList CELL_GetList_Z(int WAREHOUSE_ID,int AREA_ID, string CELL_Z)
{
return this._P_WH_CELL.CELL_GetList_Z(WAREHOUSE_ID, AREA_ID,CELL_Z);
}
///
/// 货位尺寸查询
///
public DataTable CELL_SIZE_GetTable(int WAREHOUSE_ID, int AREA_ID, string CELL_Z)
{
string sSQL = @"SELECT MIN(CELL_X) AS MIN_CELL_X,
MAX(CELL_X) AS MAX_CELL_X,
MIN(CELL_Y) AS MIN_CELL_Y,
MAX(CELL_Y) AS MAX_CELL_Y,
MAX(CELL_WIDTH) AS MAX_CELL_WIDTH,
MAX(CELL_HEIGHT) AS MAX_CELL_HEIGTH,
MIN(CELL_WIDTH) AS MIN_CELL_WIDTH,
MIN(CELL_HEIGHT) AS MIN_CELL_HEIGTH
FROM V_WH_CELL
WHERE 1=1 {0} {1} {2}";
using (DataTable dt = this.GetList(string.Format(sSQL,
(0 == WAREHOUSE_ID) ? string.Empty : string.Format(" AND WAREHOUSE_ID = {0}", WAREHOUSE_ID.ToString()),
(0 == AREA_ID) ? string.Empty : string.Format(" AND AREA_ID = {0}", AREA_ID.ToString()),
string.IsNullOrEmpty(CELL_Z) ? string.Empty : string.Format(" AND CELL_Z = '{0}'", CELL_Z.ToString())
)))
{
return dt;
}
}
public bool CellInit()
{
bool bResult = true;
try
{
IList lsWH_DESCRIPTION = this._P_WH_DESCRIPTION.GetList();
foreach (SiaSun.LMS.Model.WH_DESCRIPTION mWH_DESCRIPTION in lsWH_DESCRIPTION)
{
if (mWH_DESCRIPTION.CELL_TYPE == SiaSun.LMS.Enum.CELL_TYPE.Cell.ToString())
bResult = this.CellCreate(mWH_DESCRIPTION.WAREHOUSE_ID,
mWH_DESCRIPTION.AREA_ID,
mWH_DESCRIPTION.LOGIC_ID,
mWH_DESCRIPTION.START_Z,
mWH_DESCRIPTION.END_Z,
mWH_DESCRIPTION.START_X,
mWH_DESCRIPTION.END_X,
mWH_DESCRIPTION.START_Y,
mWH_DESCRIPTION.END_Y,
mWH_DESCRIPTION.DEVICE_CODE,
mWH_DESCRIPTION.LANE_WAY,
mWH_DESCRIPTION.SHELF_TYPE,
mWH_DESCRIPTION.SHELF_NEIGHBOUR,
mWH_DESCRIPTION.CELL_MODEL,
mWH_DESCRIPTION.CELL_LOGICAL_NAME,
mWH_DESCRIPTION.CELL_INOUT,
mWH_DESCRIPTION.CELL_TYPE,
mWH_DESCRIPTION.CELL_STORAGE_TYPE,
mWH_DESCRIPTION.CELL_FORK_TYPE,
Convert.ToInt32(mWH_DESCRIPTION.CELL_FORK_COUNT),
mWH_DESCRIPTION.CELL_WIDTH,
mWH_DESCRIPTION.CELL_HEIGHT
);
else
bResult = this.StationCreate(
mWH_DESCRIPTION.WAREHOUSE_ID,
mWH_DESCRIPTION.AREA_ID,
mWH_DESCRIPTION.LOGIC_ID,
mWH_DESCRIPTION.DEVICE_CODE,
mWH_DESCRIPTION.DEVICE_NAME,
mWH_DESCRIPTION.LANE_WAY,
mWH_DESCRIPTION.SHELF_TYPE,
mWH_DESCRIPTION.SHELF_NEIGHBOUR,
mWH_DESCRIPTION.CELL_MODEL,
mWH_DESCRIPTION.CELL_LOGICAL_NAME,
mWH_DESCRIPTION.CELL_INOUT,
mWH_DESCRIPTION.CELL_TYPE,
mWH_DESCRIPTION.CELL_STORAGE_TYPE,
mWH_DESCRIPTION.CELL_FORK_TYPE
);
}
}
catch (Exception ex)
{
bResult = false;
}
return bResult;
}
/// 获得-新建
/// 获得-新建
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
public bool CellCreate(int WAREHOUSE_ID,
int AREA_ID,
int LOGIC_ID,
int z_begin,
int z_end,
int x_begin,
int x_end,
int y_begin,
int y_end,
string DEVICE_CODE,
string LANE_WAY,
string SHELF_TYPE,
string SHELF_NEIGHBOUR,
string CELL_MODEL,
string CELL_LOGICAL_NAME,
string CELL_INOUT,
string CELL_TYPE,
string CELL_STORAGE_TYPE,
string CELL_FORK_TYPE,
int CELL_FORK_COUNT,
int CELL_WIDTH,
int CELL_HEIGHT
)
{
bool bResult = true;
SiaSun.LMS.Model.WH_CELL mST_CELL = new SiaSun.LMS.Model.WH_CELL();
for (int z = z_begin; z <= z_end; z++)
{
for (int x = x_begin; x <= x_end; x++)
{
for (int y = y_begin; y <= y_end; y++)
{
mST_CELL.WAREHOUSE_ID = WAREHOUSE_ID;
mST_CELL.AREA_ID = AREA_ID;
mST_CELL.LOGIC_ID = LOGIC_ID;
mST_CELL.CELL_CODE = z.ToString().PadLeft(2, '0') + "-" + x.ToString().PadLeft(2, '0') + "-" + y.ToString().PadLeft(2, '0');
mST_CELL.CELL_NAME = z.ToString().PadLeft(2,'0') + "-" +x.ToString().PadLeft(2, '0') + "-" + y.ToString().PadLeft(2, '0') ;
mST_CELL.LANE_WAY = LANE_WAY;
mST_CELL.DEVICE_CODE = DEVICE_CODE;
mST_CELL.SHELF_TYPE = SHELF_TYPE;
mST_CELL.SHELF_NEIGHBOUR = SHELF_NEIGHBOUR;
mST_CELL.CELL_MODEL = CELL_MODEL;
mST_CELL.CELL_LOGICAL_NAME = CELL_LOGICAL_NAME;
mST_CELL.CELL_INOUT = CELL_INOUT;
mST_CELL.CELL_TYPE = CELL_TYPE;
mST_CELL.CELL_STORAGE_TYPE = CELL_STORAGE_TYPE;
mST_CELL.CELL_FORK_TYPE = CELL_FORK_TYPE;
mST_CELL.CELL_Z = z;
mST_CELL.CELL_X = x;
mST_CELL.CELL_Y = y;
mST_CELL.CELL_STATUS = SiaSun.LMS.Enum.CELL_STATUS.Nohave.ToString();
mST_CELL.RUN_STATUS = SiaSun.LMS.Enum.RUN_STATUS.Enable.ToString();
mST_CELL.CELL_WIDTH = CELL_WIDTH;
mST_CELL.CELL_HEIGHT = CELL_HEIGHT;
mST_CELL.CELL_FLAG = "1";
mST_CELL.CELL_GROUP = z.ToString().PadLeft(2, '0') + "-" + (x % CELL_FORK_COUNT == 0 ? (x / CELL_FORK_COUNT) : (x / CELL_FORK_COUNT) + 1).ToString().PadLeft(2, '0') + "-" + y.ToString().PadLeft(2, '0');
SiaSun.LMS.Model.WH_CELL temp_st_cell = this._P_WH_CELL.GetModel(AREA_ID, mST_CELL.CELL_CODE);
if (null == temp_st_cell)
{
this._P_WH_CELL.Add(mST_CELL);
}
else
{
mST_CELL.CELL_ID = temp_st_cell.CELL_ID;
mST_CELL.CELL_STATUS = temp_st_cell.CELL_STATUS;
mST_CELL.RUN_STATUS = temp_st_cell.RUN_STATUS;
this._P_WH_CELL.Update(mST_CELL);
}
}
}
}
return bResult;
}
/// 获得-新建
/// 获得-新建
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
///
public bool StationCreate( int WAREHOUSE_ID,
int AREA_ID,
int LOGIC_ID,
string DEVICE_CODE,
string DEVICE_NAME,
string LANE_WAY,
string SHELF_TYPE,
string SHELF_NEIGHBOUR,
string CELL_MODEL,
string CELL_LOGICAL_NAME,
string CELL_INOUT,
string CELL_TYPE,
string CELL_STORAGE_TYPE,
string CELL_FORK_TYPE
)
{
bool bResult = true;
SiaSun.LMS.Model.WH_CELL mST_CELL = new SiaSun.LMS.Model.WH_CELL();
mST_CELL.WAREHOUSE_ID = WAREHOUSE_ID;
mST_CELL.AREA_ID = AREA_ID;
mST_CELL.LOGIC_ID = LOGIC_ID;
mST_CELL.CELL_CODE = DEVICE_CODE;
mST_CELL.CELL_NAME = DEVICE_NAME;
mST_CELL.LANE_WAY = LANE_WAY;
mST_CELL.DEVICE_CODE = DEVICE_CODE;
mST_CELL.SHELF_TYPE = SHELF_TYPE;
mST_CELL.SHELF_NEIGHBOUR = SHELF_NEIGHBOUR;
mST_CELL.CELL_MODEL = CELL_MODEL;
mST_CELL.CELL_LOGICAL_NAME = CELL_LOGICAL_NAME;
mST_CELL.CELL_INOUT = CELL_INOUT;
mST_CELL.CELL_TYPE = CELL_TYPE;
mST_CELL.CELL_STORAGE_TYPE = CELL_STORAGE_TYPE;
mST_CELL.CELL_FORK_TYPE = CELL_FORK_TYPE;
mST_CELL.CELL_Z = 0;
mST_CELL.CELL_X = 0;
mST_CELL.CELL_Y = 0;
mST_CELL.CELL_STATUS = SiaSun.LMS.Enum.CELL_STATUS.Nohave.ToString();
mST_CELL.RUN_STATUS = SiaSun.LMS.Enum.RUN_STATUS.Enable.ToString();
mST_CELL.CELL_FLAG = "1";
SiaSun.LMS.Model.WH_CELL temp_st_cell = this._P_WH_CELL.GetModel(AREA_ID, mST_CELL.CELL_CODE);
if (null == temp_st_cell)
{
this._P_WH_CELL.Add(mST_CELL);
}
else
{
mST_CELL.CELL_ID = temp_st_cell.CELL_ID;
mST_CELL.CELL_STATUS = temp_st_cell.CELL_STATUS;
mST_CELL.RUN_STATUS = temp_st_cell.RUN_STATUS;
this._P_WH_CELL.Update(mST_CELL);
}
return bResult;
}
/// 获得入库货位--停用
/// 获得入库货位
///
/// 库存编号
/// 库区编号
/// 存储区编号
/// 起始货位
/// 货位状态
/// 运行状态
/// 货位尺寸
/// 托盘条码
/// 终止货位
/// 返回结果
///
public bool CellInAllocate(string START_DEVICE_CODE, string CELL_MODEL, int MANAGE_ID,int FORK_COUNT, out int END_CELL_ID, out string sResult)
{
sResult = string.Empty;
END_CELL_ID = 0;
END_CELL_ID = this._P_WH_CELL.CellInAllocate(START_DEVICE_CODE, CELL_MODEL, MANAGE_ID, FORK_COUNT, out sResult);
if (END_CELL_ID == 0)
return false;
else
return true;
}
///
/// 根据配盘方案 获得出库巷道
///
///
///
///
///
///
///
public bool LaneWayGetList(int END_CELL_ID,
int TEMPLATE_ID,
out DataTable dtLANEWAY,
out string sResult)
{
bool bResult = true;
dtLANEWAY = null;
sResult = string.Empty;
SiaSun.LMS.Model.WH_CELL mWH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID);
bResult = null != mWH_CELL;
if (!bResult)
{
sResult = "未找到出库站台";
return bResult;
}
string sSQL = string.Format(@"SELECT DEVICE_CODE,
LANE_WAY ,
SUM(STORAGE_LIST_QUANTITY) AS STORAGE_BALANCE,
dbo.OUTTASKBALANCE(DEVICE_CODE) AS OUT_TASK_BALANCE
FROM V_STORAGE_LIST
WHERE TEMPATE_ID = {0}
AND CELL_TYPE = 'Cell'
AND DEVICE_CODE IN (SELECT START_DEVICE FROM IO_CONTROL_ROUTE WHERE END_DEVICE='{3}' AND CONTROL_ROUTE_STATUS = 1)
{1}
{2}
GROUP BY LANE_WAY,DEVICE_CODE",
/*0*/ TEMPLATE_ID,
/*1*/string.Format(" AND ( CELL_STATUS = '{0}' or CELL_STATUS = '{1}') ", SiaSun.LMS.Enum.CELL_STATUS.Full.ToString(), SiaSun.LMS.Enum.CELL_STATUS.Pallet.ToString()),
/*2*/string.Format(" AND RUN_STATUS = '{0}'", SiaSun.LMS.Enum.RUN_STATUS.Enable.ToString()),
/*3*/mWH_CELL.DEVICE_CODE
);
dtLANEWAY = this.GetList(sSQL);
bResult = dtLANEWAY.Rows.Count > 0;
if (!bResult)
{
sResult = string.Format("未找到出库巷道");
return bResult;
}
return bResult;
}
//=============================
/// 货位-更改状态
/// 货位-更改状态
///
/// 货位编号
/// 货位类型
/// 存储状态
/// 运行状态
/// 返回值
///
public bool CellUpdateStatus(int CELL_ID, string CELL_STATUS, string RUN_STATUS, out string sResult)
{
bool bResult = true;
sResult = string.Empty;
if (0 == CELL_ID)
{
return bResult;
}
try
{
SiaSun.LMS.Model.WH_CELL mWH_CELL = this._P_WH_CELL.GetModel(CELL_ID);
if (null == mWH_CELL)
{
bResult = false;
sResult = string.Format("未找到货位{0}", CELL_ID.ToString());
return bResult;
}
if (!mWH_CELL.CELL_TYPE.Equals(SiaSun.LMS.Enum.CELL_TYPE.Cell.ToString()))
{
return bResult;
}
SiaSun.LMS.Model.WH_AREA mWH_AREA = this._P_WH_AREA.GetModel(mWH_CELL.AREA_ID);
if (mWH_AREA.AREA_TYPE.Equals(SiaSun.LMS.Enum.AREA_TYPE.XuNiKu.ToString()))
{
return bResult;
}
if (!string.IsNullOrEmpty(CELL_STATUS))
{
mWH_CELL.CELL_STATUS = CELL_STATUS;
}
if (!string.IsNullOrEmpty(RUN_STATUS))
{
mWH_CELL.RUN_STATUS = RUN_STATUS;
}
this._P_WH_CELL.Update(mWH_CELL);
}
catch (Exception ex)
{
bResult = false;
sResult = ex.Message;
this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex);
}
return bResult;
}
///
/// 获得入库目标货位-就近原则
///
/// 库房
/// 库区
///
///
///
///
///
///
///
///
public bool CellGetIn(int WAREHOUSE_ID,
int AREA_ID,
int START_CELL_ID,
string CELL_STATUS,
string RUN_STATUS,
string CELL_MODEL,
string LOGIC_AREA,
string STOCK_BARCODE,
out int END_CELL_ID,
out string sResult)
{
bool bResult = true;
sResult = string.Empty;
END_CELL_ID = 0;
string DEVICE_CODE = string.Empty;
try
{
SiaSun.LMS.Model.WH_CELL mWH_CELL = this._P_WH_CELL.GetModel(START_CELL_ID);
if (mWH_CELL == null)
{
bResult = false;
sResult = string.Format("起始位置索引[{0}]不存在", START_CELL_ID);
return bResult;
}
string str = string.Format(@"SELECT END_DEVICE FROM IO_CONTROL_ROUTE
WHERE START_DEVICE ='{0}' AND CONTROL_ROUTE_STATUS = 1", mWH_CELL.CELL_CODE);
DataTable dt_route = this.GetList(str);
//SiaSun.LMS.Model.IO_CONTROL_APPLY lsIO_CONTROL_APPLY = this._P_IO_CONTROL_APPLY.GetModelbyStart(3,"12101");
if (dt_route == null )
{
bResult = false;
sResult = string.Format("路径不通或无可用巷道,查看是否有报警或货位已满");
// lsIO_CONTROL_APPLY.APPLY_TASK_STATUS = 0;
// this._P_IO_CONTROL_APPLY.Update(lsIO_CONTROL_APPLY);
return bResult;
}
string strSQL = string.Format(@"SELECT * FROM WH_CELL
WHERE 1=1
{0}
{1}
{2}
{3}
{4}
{5} ORDER BY CELL_Z,CELL_Y,CELL_X",
/*1*/(0 == AREA_ID) ? string.Empty : string.Format(" AND AREA_ID = {0}", AREA_ID),
/*2*/string.IsNullOrEmpty(LOGIC_AREA) ? string.Empty : string.Format(" AND CELL_LOGICAL_NAME='{0}'", LOGIC_AREA),
/*3*/ string.Format(" AND CELL_STATUS = '{0}'", Enum.CELL_STATUS.Nohave.ToString()),
/*4*/string.Format(" AND RUN_STATUS = '{0}'", Enum.RUN_STATUS.Enable.ToString()),
/*5 Normal路径*/string.Format(" AND DEVICE_CODE IN (SELECT END_DEVICE FROM IO_CONTROL_ROUTE WHERE START_DEVICE ='{0}' AND CONTROL_ROUTE_STATUS = 1)", mWH_CELL.DEVICE_CODE),
/*6*/string.Format(" AND LANE_WAY= '{0}'", mWH_CELL.LANE_WAY));
// DataTable dtCELLCount = base.GetList(strCount);
// // 均匀分配任务//根据任务查巷道ljc20221126
// string strSQL1 = string.Format(@"SELECT count(V_MANAGE.DEVICE_CODE) as count ,V_DEVICE_CODE.DEVICE_CODE FROM V_MANAGE right join
// V_DEVICE_CODE on V_DEVICE_CODE.DEVICE_CODE = V_MANAGE.DEVICE_CODE
// where
// V_DEVICE_CODE.DEVICE_CODE IN (SELECT END_DEVICE FROM IO_CONTROL_ROUTE WHERE START_DEVICE ='12101' AND CONTROL_ROUTE_STATUS = 1)
// and
// V_DEVICE_CODE.DEVICE_CODE IN (SELECT DEVICE_CODE FROM WH_CELL
// WHERE CELL_TYPE = 'Cell' AND CELL_STATUS = 'Nohave' AND RUN_STATUS = 'Enable' AND CELL_MODEL = '{0}' {1})
// group by V_DEVICE_CODE.DEVICE_CODE order by count,V_DEVICE_CODE.DEVICE_CODE desc", CELL_MODEL,
// /*1*/string.IsNullOrEmpty(LOGIC_AREA) ? string.Empty : string.Format(" AND LOGIC_ID IN ({0})", Convert.ToInt32(LOGIC_AREA)));
// DataTable dtCELL1 = base.GetList(strSQL1);
// // DataTable dtStorage = base.GetList(strSQL2);
// string device_codee = string.Empty;
// string pin = string.Empty;
// if (dtCELL1.Rows.Count > 0)
// {
// if (dtCELL1.Rows.Count > 1)
// {
// if (dtCELL1.Rows[0]["count"].ToString().Equals(dtCELL1.Rows[1]["count"].ToString()))
// {
// for (int i = 0; i < dtCELL1.Rows.Count; i++)
// {
// if (dtCELL1.Rows[0]["count"].ToString().Equals(dtCELL1.Rows[i]["count"].ToString()))
// {
// device_codee += dtCELL1.Rows[i]["DEVICE_CODE"].ToString() + ",";
// }
// }
// device_codee = device_codee.Substring(0, device_codee.Length - 1);
// pin = "(" + device_codee + ")";
// // 查每个巷道可用货位数量
// string strSQL2 = string.Format(@"SELECT count(wh_cell.DEVICE_CODE) as count ,V_DEVICE_CODE.DEVICE_CODE FROM V_MANAGE right join
// V_DEVICE_CODE on V_DEVICE_CODE.DEVICE_CODE = V_MANAGE.DEVICE_CODE inner JOIN
//wh_cell on V_DEVICE_CODE.DEVICE_CODE=wh_cell.DEVICE_CODE
// where
// V_DEVICE_CODE.DEVICE_CODE IN (SELECT END_DEVICE FROM IO_CONTROL_ROUTE WHERE START_DEVICE ='12101' AND CONTROL_ROUTE_STATUS = 1)
// and
// wh_cell.DEVICE_CODE IN (SELECT DEVICE_CODE FROM WH_CELL
// WHERE CELL_TYPE = 'Cell' AND CELL_STATUS = 'Nohave' AND RUN_STATUS = 'Enable' AND CELL_MODEL >= '{0}') and
//wh_cell.CELL_TYPE = 'Cell' AND wh_cell.CELL_STATUS = 'Nohave' AND wh_cell.RUN_STATUS = 'Enable' AND wh_cell.CELL_MODEL >= '{0}' and V_DEVICE_CODE.DEVICE_CODE IN {1} {2}
// group by V_DEVICE_CODE.DEVICE_CODE order by count desc,V_DEVICE_CODE.DEVICE_CODE desc", CELL_MODEL, pin,
// /*2*/string.IsNullOrEmpty(LOGIC_AREA) ? string.Empty : string.Format(" AND LOGIC_ID IN ({0})", Convert.ToInt32(LOGIC_AREA)));
// DataTable dtStorage = base.GetList(strSQL2);
// if (dtStorage.Rows.Count > 0)
// {
// DEVICE_CODE = dtStorage.Rows[0]["DEVICE_CODE"].ToString();
// }
// }
// else
// {
// DEVICE_CODE = dtCELL1.Rows[0]["DEVICE_CODE"].ToString();
// }
// }
// else
// {
// DEVICE_CODE = dtCELL1.Rows[0]["DEVICE_CODE"].ToString();
// }
// }
// else
// {
// bResult = false;
// sResult = string.Format("路径不通或无可用巷道,查看是否有报警或货位已满");
// lsIO_CONTROL_APPLY.APPLY_TASK_STATUS = 0;
// this._P_IO_CONTROL_APPLY.Update(lsIO_CONTROL_APPLY);
// return bResult;
// }
// string strSQL = string.Format(@"SELECT CELL_ID,CELL_Z,CELL_X,CELL_Y FROM WH_CELL
// WHERE CELL_TYPE = 'Cell'
// AND CELL_STATUS = 'Nohave'
// AND RUN_STATUS = 'Enable'
// AND CELL_MODEL >= '{0}'
// AND DEVICE_CODE IN ({2}) {3}
// ORDER BY CELL_Y , CELL_X DESC,CELL_Z ", CELL_MODEL, mWH_CELL.CELL_CODE, DEVICE_CODE,
// /*3*/string.IsNullOrEmpty(LOGIC_AREA) ? string.Empty : string.Format(" AND LOGIC_ID IN ({0})", Convert.ToInt32(LOGIC_AREA)));
DataTable dtCELL = base.GetList(strSQL);
if (dtCELL.Rows.Count > 0)
{
END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID"]);
}
else
{
bResult = false;
sResult = string.Format("货位不足") ;
return bResult;
}
}
catch (Exception ex)
{
bResult = false;
sResult = ex.Message;
this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex);
}
return bResult;
}
///
/// 根据巷道 物料及物料属性 获得出库货位
///
///
///
///
///
///
///
///
///
///
///
public bool CellOutAllocate(int LANE_WAY,
int END_CELL_ID,
int GOODS_ID,
string GOODS_PROPERTY_CONDITION,
decimal MANAGE_LIST_QUANTITY,
out int START_CELL_ID,
out string STOCK_BARCODE,
out decimal STORAGE_LIST_QUANTITY,
out string sResult)
{
bool bResult = false;
sResult = string.Empty;
START_CELL_ID = 0;
STORAGE_LIST_QUANTITY = 0;
STOCK_BARCODE = string.Empty;
SiaSun.LMS.Model.WH_CELL mWH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID);
bResult = null != mWH_CELL;
if (!bResult)
{
sResult = "未找到出库站台";
return bResult;
}
string sSQL = string.Format(@"SELECT STORAGE_MAIN.CELL_ID ,STOCK_BARCODE ,
isnull(SUM(STORAGE_LIST_QUANTITY),0) AS MANAGE_LIST_QUANTITY
FROM STORAGE_LIST
INNER JOIN STORAGE_MAIN ON (STORAGE_LIST.STORAGE_ID = STORAGE_MAIN.STORAGE_ID )
INNER JOIN WH_CELL ON (STORAGE_MAIN.CELL_ID = WH_CELL.CELL_ID)
WHERE GOODS_ID = {2}
{0}
{1}
{3}
AND LANE_WAY = {4}
AND CELL_TYPE = 'Cell'
AND CELL_INOUT!='In'
GROUP BY STOCK_BARCODE,
STORAGE_MAIN.CELL_ID,
CELL_Y,
CELL_X
ORDER BY
max(substring(ENTRY_TIME,0,11)),
ABS({5}-isnull(SUM(STORAGE_LIST_QUANTITY),0)),
MANAGE_LIST_QUANTITY DESC,
CELL_Y,
CELL_X",
/*0*/string.Format(" AND CELL_STATUS != '{0}'", SiaSun.LMS.Enum.CELL_STATUS.Exception.ToString()),
/*1*/string.Format(" AND RUN_STATUS = '{0}'", SiaSun.LMS.Enum.RUN_STATUS.Enable.ToString()),
/*2*/GOODS_ID,
/*3*/ GOODS_PROPERTY_CONDITION,
/*4*/LANE_WAY,
/*5*/MANAGE_LIST_QUANTITY);
DataTable dt = this.GetList(sSQL);
bResult = dt.Rows.Count > 0;
if (bResult)
{
START_CELL_ID = Convert.ToInt32(dt.Rows[0]["CELL_ID"]);
STOCK_BARCODE = Convert.ToString(dt.Rows[0]["STOCK_BARCODE"]);
STORAGE_LIST_QUANTITY = Convert.ToDecimal(dt.Rows[0]["MANAGE_LIST_QUANTITY"]);
}
else
{
START_CELL_ID = 0;
sResult = string.Format("未找到出库货位");
}
return bResult;
}
public bool GetOutEndStation(bool bContainer, int START_CELL_ID, int END_AREA_ID, out int END_CELL_ID, out string sResult)
{
bool bResult = true;
sResult = string.Empty;
END_CELL_ID = 0;
try
{
SiaSun.LMS.Model.WH_CELL mWH_CELL = this._P_WH_CELL.GetModel(START_CELL_ID);
if (mWH_CELL == null)
{
bResult = false;
sResult = string.Format("起始位置索引[{0}]不存在", START_CELL_ID);
return bResult;
}
string strSQL = string.Format(@"SELECT TOP 1 CELL_ID
FROM WH_CELL
WHERE CELL_TYPE = 'Station'
AND CELL_INOUT='Out'
{0}
{1}
{2}
ORDER BY {3}CELL_MODEL,CELL_Z,CELL_X,CELL_Y",
/*0*/string.Format(" AND DEVICE_CODE IN (SELECT END_DEVICE FROM IO_CONTROL_ROUTE WHERE START_DEVICE ='{0}' AND CONTROL_ROUTE_STATUS = 1)", mWH_CELL.DEVICE_CODE),
/*1*/END_AREA_ID == 0 ? string.Empty : string.Format(" AND AREA_ID={0}", END_AREA_ID),
/*2*/bContainer ? string.Empty : string.Format(" AND CELL_MODEL!='-1' "),
/*3*/string.Format("ABS({0}-LANE_WAY),", mWH_CELL.LANE_WAY));
DataTable dtCELL = base.GetList(strSQL);
if (dtCELL.Rows.Count > 0)
{
END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID"]);
}
else
{
bResult = false;
sResult = string.Format("起始位置[{0}]未找到可用下架站台,请确认WCS作业区模式、路径", mWH_CELL.CELL_NAME);
return bResult;
}
}
catch (Exception ex)
{
bResult = false;
sResult = ex.Message;
this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex);
}
return bResult;
}
///
/// 根据物料及物料属性获得下架巷道
///
///
///
///
///
///
///
public bool LaneWayGetList(int END_CELL_ID,
int GOODS_ID,
string GOODS_PROPERTY_CONDITION,
out DataTable dtLANEWAY,
out string sResult)
{
bool bResult = true;
dtLANEWAY = null;
sResult = string.Empty;
SiaSun.LMS.Model.WH_CELL mWH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID);
bResult = null != mWH_CELL;
if (!bResult)
{
sResult = "未找到下架站台";
return bResult;
}
string sSQL = string.Format(@"SELECT DEVICE_CODE,
LANE_WAY ,
SUM(STORAGE_LIST_QUANTITY) AS STORAGE_BALANCE,
dbo.OUTTASKBALANCE(DEVICE_CODE) AS OUT_TASK_BALANCE
FROM V_STORAGE_LIST
WHERE GOODS_ID = {2}
{3}
AND CELL_TYPE = 'Cell'
AND DEVICE_CODE IN (SELECT START_DEVICE FROM IO_CONTROL_ROUTE WHERE END_DEVICE='{4}' AND CONTROL_ROUTE_STATUS = 1)
{0}
{1}
GROUP BY LANE_WAY,DEVICE_CODE",
/*0*/string.Format(" AND ( CELL_STATUS != '{0}') ", SiaSun.LMS.Enum.CELL_STATUS.Exception.ToString()),
/*1*/string.Format(" AND RUN_STATUS = '{0}'", SiaSun.LMS.Enum.RUN_STATUS.Enable.ToString()),
/*2*/GOODS_ID,
/*3*/GOODS_PROPERTY_CONDITION,
/*4*/mWH_CELL.DEVICE_CODE
);
dtLANEWAY = this.GetList(sSQL);
bResult = dtLANEWAY.Rows.Count > 0;
if (!bResult)
{
sResult = string.Format("未找到满足条件的下架巷道");
return bResult;
}
return bResult;
}
///
/// 根据起始货位,获得终止站台
///
///
///
///
///
public bool GetOutStation(int START_CELL_ID, out int END_CELL_ID, out string sResult)
{
bool bResult = true;
sResult = string.Empty;
END_CELL_ID = 0;
try
{
SiaSun.LMS.Model.WH_CELL mWH_CELL = this._P_WH_CELL.GetModel(START_CELL_ID);
if (mWH_CELL == null)
{
bResult = false;
sResult = string.Format("起始位置索引[{0}]不存在", START_CELL_ID);
return bResult;
}
string strSQL = string.Format(@"SELECT TOP 1 CELL_ID
FROM WH_CELL
WHERE CELL_TYPE = 'Station'
AND CELL_INOUT<>'In'
{0}
ORDER BY {1}CELL_MODEL,CELL_X,CELL_Y,CELL_Z",
/*0*/string.Format(" AND DEVICE_CODE IN (SELECT END_DEVICE FROM IO_CONTROL_ROUTE WHERE START_DEVICE ='{0}' AND CONTROL_ROUTE_STATUS = 1)", mWH_CELL.DEVICE_CODE),
/*1*/string.Format("ABS({0}-LANE_WAY),", mWH_CELL.LANE_WAY));
DataTable dtCELL = base.GetList(strSQL);
if (dtCELL.Rows.Count > 0)
{
END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID"]);
}
else
{
bResult = false;
sResult = string.Format("起始位置[{0}]未找到下架站台", mWH_CELL.CELL_NAME);
return bResult;
}
}
catch (Exception ex)
{
bResult = false;
sResult = ex.Message;
this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex);
}
return bResult;
}
}
}