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 SiaSun.LMS.Persistence ;
namespace SiaSun.LMS.Implement
{
[ServiceBehavior(IncludeExceptionDetailInFaults = true, InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple, MaxItemsInObjectGraph = int.MaxValue)]
public partial class S_CellService : SiaSun . LMS . Implement . S_BaseService , SiaSun . LMS . Interface . I_CellService
{
int _ CellCountLimit = Convert . ToInt32 ( Common . StringUtil . GetConfig ( "CellCountLimit" ) ) ;
int _ XlCellCountLimit = Convert . ToInt32 ( Common . StringUtil . GetConfig ( "XlCellCountLimit" ) ) ;
public S_CellService ( )
{
}
/// <summary>获得库房
/// 获得库房
/// </summary>
/// <param name="WAREHOUSE_CODE">库房编码</param>
/// <returns>返回值</returns>
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 ;
}
/// <summary>获得库区
/// 获得库区
/// </summary>
/// <param name="WAREHOUSE_ID">库房编号</param>
/// <param name="AREA_TYPE">库区类型</param>
/// <returns>返回值</returns>
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 1=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 ;
}
/// <summary>获得排
/// 获得排没有area_id区分
/// </summary>
/// <param name="WAREHOUSE_ID">库房编号</param>
/// <param name="AREA_ID">库区编号</param>
/// <param name="LOGIC_ID">存储区编号</param>
/// <param name="CELL_TYPE">货位类型</param>
/// <param name="CELL_INOUT">出入库方向</param>
/// <returns></returns>
public DataTable CELL_Z_GetList ( int WAREHOUSE_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 = = WAREHOUSE_ID ) ? string . Empty : string . Format ( " AND WAREHOUSE_ID = {0}" , WAREHOUSE_ID . ToString ( ) )
) ) ;
return dt ;
}
/// <summary>获得排
/// 获得排有area_id区分
/// </summary>
/// <param name="WAREHOUSE_ID">库房编号</param>
/// <param name="AREA_ID">库区编号</param>
/// <param name="LOGIC_ID">存储区编号</param>
/// <param name="CELL_TYPE">货位类型</param>
/// <param name="CELL_INOUT">出入库方向</param>
/// <returns></returns>
public DataTable CELL_Z_GetList_AREA ( int WAREHOUSE_ID , int AREA_ID )
{
string sSQL = "SELECT * FROM V_WH_CELL_Z WHERE 1=1 {0} {1} ORDER BY CELL_Z" ;
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 ( ) )
) ) ;
return dt ;
}
public IList < SiaSun . LMS . Model . WH_CELL > CELL_GetList_Z ( int WAREHOUSE_ID , string CELL_Z )
{
return this . _ P_WH_CELL . CELL_GetList_Z ( WAREHOUSE_ID , CELL_Z ) ;
}
public bool CellInit ( )
{
bool bResult = true ;
try
{
IList < SiaSun . LMS . Model . WH_DESCRIPTION > 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 ,
mWH_DESCRIPTION . CELL_WIDTH ,
mWH_DESCRIPTION . CELL_HEIGHT ,
Convert . ToInt32 ( mWH_DESCRIPTION . CELL_FORK_COUNT )
) ;
else
bResult = this . CellCreate ( 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 ,
mWH_DESCRIPTION . CELL_WIDTH ,
mWH_DESCRIPTION . CELL_HEIGHT
) ;
}
}
catch ( Exception ex )
{
bResult = false ;
}
return bResult ;
}
/// <summary>获得-新建
/// 获得-新建
/// </summary>
/// <param name="AREA_ID"></param>
/// <param name="z_begin"></param>
/// <param name="z_end"></param>
/// <param name="x_begin"></param>
/// <param name="x_end"></param>
/// <param name="y_begin"></param>
/// <param name="y_end"></param>
/// <param name="WAREHOUSE_CODE"></param>
/// <param name="AREA_TYPE"></param>
/// <param name="LANE_WAY"></param>
/// <param name="CELL_MODEL"></param>
/// <param name="SHELF_TYPE"></param>
/// <param name="SHELF_NEIGHBOUR"></param>
/// <param name="CELL_LOGICAL_NAME"></param>
/// <param name="CELL_STATUS"></param>
/// <param name="RUN_STATUS"></param>
/// <param name="CELL_TYPE"></param>
/// <param name="DEVICE_CODE"></param>
/// <returns></returns>
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_WIDTH ,
int CELL_HEIGHT ,
int CELL_FORK_COUNT
)
{
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_FLAG = "1" ;
mST_CELL . CELL_WIDTH = CELL_WIDTH ;
mST_CELL . CELL_HEIGHT = CELL_HEIGHT ;
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' ) ;
if ( SHELF_TYPE = = "Double" )
{
mST_CELL . LOCK_DEVICE_CODE = SHELF_NEIGHBOUR . ToString ( ) . PadLeft ( 2 , '0' ) + "-" + x . ToString ( ) . PadLeft ( 2 , '0' ) + "-" + y . ToString ( ) . PadLeft ( 2 , '0' ) ;
}
//lyc
this . _ P_WH_CELL . Add ( mST_CELL ) ;
//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 ;
}
/// <summary>获得-新建
/// 获得-新建
/// </summary>
/// <param name="AREA_ID"></param>
/// <param name="CELL_CODE"></param>
/// <param name="CELL_NAME"></param>
/// <param name="WAREHOUSE_CODE"></param>
/// <param name="AREA_TYPE"></param>
/// <param name="LANE_WAY"></param>
/// <param name="CELL_MODEL"></param>
/// <param name="SHELF_TYPE"></param>
/// <param name="SHELF_NEIGHBOUR"></param>
/// <param name="CELL_LOGICAL_NAME"></param>
/// <param name="CELL_STATUS"></param>
/// <param name="RUN_STATUS"></param>
/// <param name="CELL_TYPE"></param>
/// <param name="DEVICE_CODE"></param>
/// <returns></returns>
public bool CellCreate ( 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 ,
int CELL_WIDTH ,
int CELL_HEIGHT
)
{
bool bResult = true ;
SiaSun . LMS . Model . WH_CELL mST_CELL = new SiaSun . LMS . Model . WH_CELL ( ) ;
mST_CELL . AREA_ID = AREA_ID ;
mST_CELL . WAREHOUSE_ID = WAREHOUSE_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" ;
mST_CELL . CELL_HEIGHT = CELL_HEIGHT ;
mST_CELL . CELL_WIDTH = CELL_WIDTH ;
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 ;
}
private static bool isLeft = true ;
private static bool isRight = true ;
/// <summary>获得入库货位
/// 获得入库货位
/// </summary>
/// <param name="WAREHOUSE_ID">库房编号</param>
/// <param name="AREA_ID">库区编号</param>
/// <param name="LOGIC_ID">存储区编号</param>
/// <param name="START_CELL_ID">起始货位</param>
/// <param name="CELL_STATUS">货位状态</param>
/// <param name="RUN_STATUS">运行状态</param>
/// <param name="CELL_MODEL">货位尺寸</param>
/// <param name="STOCK_BARCODE">托盘条码</param>
/// <param name="END_CELL_ID">终止货位</param>
/// <param name="sResult">返回结果</param>
/// <returns></returns>
public bool CellInAllocate ( string START_DEVICE_CODE , string CELL_MODEL ,
int MANAGE_ID , bool bPuTaoTang , out int END_CELL_ID , out string sResult )
{
sResult = string . Empty ;
bool bResult = true ;
int DEVICE_CODE = 0 ;
int index = 0 ;
int index_n = 0 ;
string PnOrder = string . Empty ;
string ordered = string . Empty ;
string strLaneway = string . Empty ;
//根据任务类型分配巷道,如果是废料入库和退料入库,只能分配到5、6巷道
string strLane = string . Empty ;
if ( START_DEVICE_CODE = = "38001" )
{
CELL_MODEL = "height" ;
}
//区分高低货位
string cell_model_sql = CELL_MODEL . Equals ( "low" ) ? " and 1=1 " : string . Format ( @" and cell_model = '{0}'" , CELL_MODEL ) ;
SiaSun . LMS . Model . MANAGE_MAIN mMANAGE_MAIN = this . _ P_MANAGE_MAIN . GetModel ( MANAGE_ID ) ;
IList < Model . MANAGE_LIST > lsManageList = this . _ P_MANAGE_LIST . GetListManageID ( MANAGE_ID ) ;
if ( lsManageList = = null )
{
sResult = string . Format ( "入库没有list明细" ) ;
END_CELL_ID = 0 ;
return false ;
}
else
{
PnOrder = string . IsNullOrEmpty ( lsManageList [ 0 ] . GOODS_PROPERTY2 ) ? " and 1=1 " : string . Format ( @" and goods_property2='{0}'" , lsManageList [ 0 ] . GOODS_PROPERTY2 ) ;
}
//如果是小料,入一巷道
GOODS_MAIN gm = this . _ P_GOODS_MAIN . GetModel ( lsManageList [ 0 ] . GOODS_ID ) ;
if ( gm = = null )
{
sResult = string . Format ( "未找到物料ID {0}" , lsManageList [ 0 ] . GOODS_ID ) ;
END_CELL_ID = 0 ;
return false ;
}
if ( START_DEVICE_CODE . StartsWith ( "140" ) | |
START_DEVICE_CODE = = "38001" )
{
bPuTaoTang = true ;
}
if ( ( gm . GOODS_CLASS_ID = = 3 | |
gm . GOODS_CLASS_ID = = 6 | |
gm . GOODS_CLASS_ID = = 7 | |
gm . GOODS_CLASS_ID = = 8 | |
gm . GOODS_CLASS_ID = = 9 | |
gm . GOODS_CLASS_ID = = 1 0 | |
gm . GOODS_CLASS_ID > 1 0 ) & & bPuTaoTang = = false )
{
strLane = " AND DEVICE_CODE IN ('18001')" ;
}
else
{
strLane = " AND DEVICE_CODE IN ('18002','18003')" ;
}
//设备状态可用并且有可用货位的巷道
strLaneway = string . Format ( @ "SELECT DEVICE_CODE
FROM ( SELECT DISTINCT DEVICE_CODE AS DEVICE_CODE
FROM WH_CELL
INNER JOIN IO_CONTROL_ROUTE ON DEVICE_CODE =
IO_CONTROL_ROUTE . END_DEVICE
WHERE CELL_TYPE = ' Cell '
{ 0 }
AND START_DEVICE = { 1 }
AND CONTROL_ROUTE_TYPE = 1
AND CONTROL_ROUTE_STATUS = 1
AND RUN_STATUS = ' Enable '
) T ORDER BY DEVICE_CODE ", strLane, START_DEVICE_CODE);
//获得所有可用巷道
DataTable dt_laneway = this . GetList ( strLaneway ) ;
if ( dt_laneway . Rows . Count = = 0 )
{
sResult = string . Format ( "入库未找到可用路径,请检查设备状态" ) ;
END_CELL_ID = 0 ;
return false ;
}
//小料库,是单伸巷道
if ( dt_laneway . Rows . Count = = 1 )
{
if ( dt_laneway . Rows [ 0 ] [ "DEVICE_CODE" ] . ToString ( ) . Equals ( "18001" ) )
{
string sCellSQL = string . Empty ;
if ( gm . GOODS_CLASS_ID = = 3 )
{
sCellSQL = "and CELL_Y>3" ;
}
DataTable dt_cell = this . GetList ( string . Format ( @ "select cell_id from wh_Cell
where device_code = ' { 0 } '
{ 1 }
AND CELL_STATUS = ' Nohave '
AND RUN_STATUS = ' Enable ' order by cell_y , cell_x ", dt_laneway.Rows[0][" DEVICE_CODE "].ToString(),
sCellSQL ) ) ;
if ( dt_cell = = null | | dt_cell . Rows . Count < 1 )
{
bResult = false ;
sResult = "小料库货位不足" ;
END_CELL_ID = 0 ;
return bResult ;
}
else
{
END_CELL_ID = Convert . ToInt32 ( dt_cell . Rows [ 0 ] [ "cell_id" ] . ToString ( ) ) ;
SiaSun . LMS . Model . WH_CELL mEND_WH_CELL = this . _ P_WH_CELL . GetModel ( END_CELL_ID ) ;
mEND_WH_CELL . RUN_STATUS = Enum . RUN_STATUS . Selected . ToString ( ) ;
this . _ P_WH_CELL . Update ( mEND_WH_CELL ) ;
return true ;
}
}
DataTable dt_cellnear ;
if ( dt_laneway . Rows [ 0 ] [ "DEVICE_CODE" ] . ToString ( ) . Equals ( "18001" ) )
{
dt_cellnear = this . GetList ( string . Format ( @ "SELECT CELL_ID
FROM WH_CELL
WHERE DEVICE_CODE = { 0 }
AND CELL_STATUS = ' Nohave '
AND RUN_STATUS = ' Enable '
AND CELL_TYPE = ' Cell ' { 1 } ",
Convert . ToInt32 ( dt_laneway . Rows [ 0 ] [ "DEVICE_CODE" ] . ToString ( ) ) , cell_model_sql ) ) ;
}
else
{
if ( gm . GOODS_CLASS_ID = = 2 | | gm . GOODS_CLASS_ID = = 4 )
{
if ( CELL_MODEL = = "low" )
{
dt_cellnear = this . GetList ( string . Format ( @ "SELECT CELL_ID
FROM WH_CELL
WHERE DEVICE_CODE = { 0 }
AND CELL_STATUS = ' Nohave '
AND RUN_STATUS = ' Enable '
AND CELL_FORK_TYPE = ' Near '
AND CELL_MODEL = ' low '
AND CELL_TYPE = ' Cell ' { 1 } ",
Convert . ToInt32 ( dt_laneway . Rows [ 0 ] [ "DEVICE_CODE" ] . ToString ( ) ) , cell_model_sql ) ) ;
}
else
{
dt_cellnear = this . GetList ( string . Format ( @ "SELECT CELL_ID
FROM WH_CELL
WHERE DEVICE_CODE = { 0 }
AND CELL_STATUS = ' Nohave '
AND RUN_STATUS = ' Enable '
AND CELL_FORK_TYPE = ' Near '
AND CELL_MODEL = ' Height '
AND CELL_TYPE = ' Cell ' { 1 } ",
Convert . ToInt32 ( dt_laneway . Rows [ 0 ] [ "DEVICE_CODE" ] . ToString ( ) ) , cell_model_sql ) ) ;
}
}
else
{
if ( CELL_MODEL = = "low" )
{
dt_cellnear = this . GetList ( string . Format ( @ "SELECT CELL_ID
FROM WH_CELL
WHERE DEVICE_CODE = { 0 }
AND CELL_STATUS = ' Nohave '
AND RUN_STATUS = ' Enable '
AND CELL_FORK_TYPE = ' Near '
AND CELL_X > 1
AND CELL_MODEL = ' low '
AND CELL_TYPE = ' Cell ' { 1 } ",
Convert . ToInt32 ( dt_laneway . Rows [ 0 ] [ "DEVICE_CODE" ] . ToString ( ) ) , cell_model_sql ) ) ;
}
else
{
dt_cellnear = this . GetList ( string . Format ( @ "SELECT CELL_ID
FROM WH_CELL
WHERE DEVICE_CODE = { 0 }
AND CELL_STATUS = ' Nohave '
AND RUN_STATUS = ' Enable '
AND CELL_FORK_TYPE = ' Near '
AND CELL_X > 1
AND CELL_MODEL = ' Height '
AND CELL_TYPE = ' Cell ' { 1 } ",
Convert . ToInt32 ( dt_laneway . Rows [ 0 ] [ "DEVICE_CODE" ] . ToString ( ) ) , cell_model_sql ) ) ;
}
}
}
if ( dt_cellnear . Rows . Count < 3 )
{
bResult = false ;
sResult = "当前双申巷道近端空货位不足,请查看!" ;
END_CELL_ID = 0 ;
return bResult ;
}
DEVICE_CODE = Convert . ToInt32 ( dt_laneway . Rows [ 0 ] [ "DEVICE_CODE" ] ) ;
}
#region 货物平均分配 可用巷道>=2时
if ( dt_laneway . Rows . Count > = 2 )
{
#region 排除无可用货位的巷道
DataTable dt_laneway1 = dt_laneway . Clone ( ) ;
dt_laneway1 . Clear ( ) ;
foreach ( DataRow item in dt_laneway . Rows )
{
if ( item [ "DEVICE_CODE" ] . ToString ( ) . Equals ( "18001" ) )
{
DataTable dt_cell = this . GetList ( string . Format ( @ "SELECT CELL_ID
FROM WH_CELL
WHERE DEVICE_CODE = { 0 }
AND CELL_STATUS = ' Nohave '
AND RUN_STATUS = ' Enable '
AND CELL_TYPE = ' Cell ' ", item[" DEVICE_CODE "]));
if ( dt_cell . Rows . Count > 0 )
{
dt_laneway1 . Rows . Add ( item . ItemArray ) ;
}
}
else
{
DataTable dt_cellnear1 ;
if ( gm . GOODS_CLASS_ID = = 2 | | gm . GOODS_CLASS_ID = = 4 )
{
if ( CELL_MODEL = = "low" )
{
dt_cellnear1 = this . GetList ( string . Format ( @ "SELECT 1
FROM V_WH_CELL_DOUBLE_TO_NORMAL
WHERE DEVICE_CODE = { 0 }
AND CELL_STATUS_NEAR = ' Nohave '
AND RUN_STATUS_NEAR = ' Enable '
AND RUN_STATUS = ' Enable ' ", item[" DEVICE_CODE "]));
}
else
{
dt_cellnear1 = this . GetList ( string . Format ( @ "SELECT 1
FROM V_WH_CELL_DOUBLE_TO_NORMAL
WHERE DEVICE_CODE = { 0 }
AND CELL_STATUS_NEAR = ' Nohave '
AND RUN_STATUS_NEAR = ' Enable '
AND RUN_STATUS = ' Enable '
AND CELL_MODEL_NEAR = ' Height ' ", item[" DEVICE_CODE "]));
}
}
else
{
if ( CELL_MODEL = = "low" )
{
dt_cellnear1 = this . GetList ( string . Format ( @ "SELECT 1
FROM V_WH_CELL_DOUBLE_TO_NORMAL
WHERE DEVICE_CODE = { 0 }
AND CELL_STATUS_NEAR = ' Nohave '
AND RUN_STATUS_NEAR = ' Enable '
AND RUN_STATUS = ' Enable '
AND CELL_X_NEAR > 1 ", item[" DEVICE_CODE "]));
}
else
{
dt_cellnear1 = this . GetList ( string . Format ( @ "SELECT 1
FROM V_WH_CELL_DOUBLE_TO_NORMAL
WHERE DEVICE_CODE = { 0 }
AND CELL_STATUS_NEAR = ' Nohave '
AND RUN_STATUS_NEAR = ' Enable '
AND RUN_STATUS = ' Enable '
AND CELL_X_NEAR > 1
AND CELL_MODEL_NEAR = ' Height ' ", item[" DEVICE_CODE "]));
}
}
if ( dt_cellnear1 . Rows . Count > 2 )
{
dt_laneway1 . Rows . Add ( item . ItemArray ) ;
}
}
}
if ( dt_laneway1 . Rows . Count < 1 )
{
sResult = string . Format ( "未找到可用货位" ) ;
END_CELL_ID = 0 ;
return false ;
}
else
{
dt_laneway = dt_laneway1 ;
}
#endregion
//获得库存少的巷道
IList < MANAGE_LIST > lsMANAGE_LIST = this . _ P_MANAGE_LIST . GetListManageID ( mMANAGE_MAIN . MANAGE_ID ) ;
DataTable dt_nohave = null ;
DataTable dt_manage_num = null ;
DataTable lane_way = null ;
int manage_num = Convert . ToInt32 ( SiaSun . LMS . Common . StringUtil . GetConfig ( "ManageCountLimit" ) . ToString ( ) ) ;
int [ ] su = new int [ dt_laneway . Rows . Count ] ;
int [ ] sm = new int [ dt_laneway . Rows . Count ] ;
for ( int i = 0 ; i < dt_laneway . Rows . Count ; i + + )
{
//当前巷道的库存数
//AND RUN_STATUS = 'Enable'
dt_nohave = this . GetList ( string . Format ( @ "SELECT CELL_ID FROM WH_CELL
WHERE CELL_TYPE = ' Cell ' AND CELL_STATUS = ' Nohave '
AND DEVICE_CODE = ' { 0 } ' { 1 } ",
Convert . ToInt32 ( dt_laneway . Rows [ i ] [ "DEVICE_CODE" ] ) ,
cell_model_sql ) ) ;
lane_way = this . GetList ( string . Format ( @"SELECT TOP 1 * FROM WH_CELL WHERE device_code = {0} AND CELL_TYPE ='Cell'" ,
Convert . ToInt32 ( dt_laneway . Rows [ i ] [ "DEVICE_CODE" ] ) ) ) ;
//当前巷道的任务数
dt_manage_num = this . GetList ( string . Format ( @ "SELECT * FROM V_MANAGE WHERE LANE_WAY = {0} AND MANAGE_STATUS = 'Executing'
AND MANAGE_TYPE_CLASS in ( ' ManageIn ',' StockInMin ',' StockIn ',' ManageUp ' ) ",
lane_way . Rows [ 0 ] [ "LANE_WAY" ] ) ) ;
su [ i ] = dt_nohave . Rows . Count ; //记库存数
sm [ i ] = dt_manage_num . Rows . Count ; //记任务数
}
int iMinIndex = 0 ;
for ( int i = 1 ; i < dt_laneway . Rows . Count ; + + i )
{
if ( sm [ i ] < sm [ iMinIndex ] )
{
iMinIndex = i ;
}
else if ( sm [ i ] = = sm [ iMinIndex ] & & su [ i ] > su [ iMinIndex ] )
{
iMinIndex = i ;
}
}
DEVICE_CODE = Convert . ToInt32 ( dt_laneway . Rows [ iMinIndex ] [ "DEVICE_CODE" ] ) ;
// FIXME BAOZHA
if ( dt_laneway . Rows . Count > 1 & &
( START_DEVICE_CODE = = "13012" | |
START_DEVICE_CODE = = "13016" | |
START_DEVICE_CODE . StartsWith ( "140" ) | |
START_DEVICE_CODE = = "38001" ) )
{
bool isZuoYou = true ;
for ( int i = 0 ; i < dt_laneway . Rows . Count ; i + + )
{
if ( dt_laneway . Rows [ i ] [ "DEVICE_CODE" ] . ToString ( ) = = "18001" )
{
isZuoYou = false ;
break ;
}
}
if ( isZuoYou )
{
if ( isRight )
{
DEVICE_CODE = 1 8 0 0 3 ;
}
else
{
DEVICE_CODE = 1 8 0 0 2 ;
}
isRight = ! isRight ;
}
}
if ( dt_laneway . Rows . Count > 1 & &
( START_DEVICE_CODE = = "11002" | |
START_DEVICE_CODE = = "11028" ) )
{
bool isZuoYou = true ;
for ( int i = 0 ; i < dt_laneway . Rows . Count ; i + + )
{
if ( dt_laneway . Rows [ i ] [ "DEVICE_CODE" ] . ToString ( ) = = "18001" )
{
isZuoYou = false ;
break ;
}
}
if ( isZuoYou )
{
if ( isLeft )
{
DEVICE_CODE = 1 8 0 0 2 ;
}
else
{
DEVICE_CODE = 1 8 0 0 3 ;
}
isLeft = ! isLeft ;
}
}
//index = SiaSun.LMS.Common.StringUtil.CheckMin(su);
//index_n = SiaSun.LMS.Common.StringUtil.CheckMin(sm);
//if (sm[index] >= manage_num)
//{
// DEVICE_CODE = Convert.ToInt32(dt_laneway.Rows[index_n]["DEVICE_CODE"]);
//}
//else
//{
// DEVICE_CODE = Convert.ToInt32(dt_laneway.Rows[index]["DEVICE_CODE"]);
//}
//优先入库双伸巷道的空货位数
DataTable dt_cellnear = this . GetList ( string . Format ( @ "SELECT CELL_ID
FROM WH_CELL
WHERE DEVICE_CODE = { 0 }
AND CELL_STATUS = ' Nohave '
AND RUN_STATUS = ' Enable '
AND CELL_FORK_TYPE = ' Near '
AND CELL_TYPE = ' Cell ' { 1 } ", DEVICE_CODE,cell_model_sql));
if ( dt_cellnear . Rows . Count = = 2 )
{
bResult = false ;
sResult = "当前双申巷道近端空货位货位不足,请查看!" ;
END_CELL_ID = 0 ;
return bResult ;
}
}
#endregion
string strSQL = string . Empty ;
DataTable dtCELL = null ;
string sOrderSQL = "" ;
if ( gm . GOODS_CLASS_ID = = 2 | |
gm . GOODS_CLASS_ID = = 4 )
{
sOrderSQL = "case when CELL_X=1 then 0 else 1 end," ;
}
#region//母托盘入库
if ( mMANAGE_MAIN . MANAGE_TYPE_CODE = = "StockIn" )
{
///条件1:
///Double有货无任务,且Double物料与上架物料一致时,选择Normal空货位
strSQL = string . Format ( @ "SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable'
AND CELL_STATUS = ' Pallet ' AND RUN_STATUS_NEAR = ' Enable ' AND DEVICE_CODE = { 0 }
AND CELL_STATUS_NEAR = ' Nohave ' ORDER BY { 1 } CELL_Y , CELL_X ", DEVICE_CODE, sOrderSQL);
dtCELL = this . GetList ( strSQL ) ;
if ( dtCELL . Rows . Count ! = 0 )
{
END_CELL_ID = Convert . ToInt32 ( dtCELL . Rows [ 0 ] [ "CELL_ID_NEAR" ] . ToString ( ) ) ;
SiaSun . LMS . Model . WH_CELL mEND_WH_CELL = this . _ P_WH_CELL . GetModel ( END_CELL_ID ) ;
mEND_WH_CELL . RUN_STATUS = Enum . RUN_STATUS . Selected . ToString ( ) ;
this . _ P_WH_CELL . Update ( mEND_WH_CELL ) ;
return true ;
}
///条件2:
///Double无货有任务,且Double任务物料与上架物料一致时,选择Normal空货位
//strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Selected' AND CELL_STATUS = 'Nohave'
// AND RUN_STATUS_NEAR = 'Enable' AND CELL_STATUS_NEAR ='Nohave' AND DEVICE_CODE = {0}
// ORDER BY CELL_Y,CELL_X", DEVICE_CODE);
//dtCELL = this.GetList(strSQL);
//if (dtCELL.Rows.Count != 0)
//{
// END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString());
// SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID);
// mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString();
// this._P_WH_CELL.Update(mEND_WH_CELL);
// return true;
//}
///条件2:Double 无货无任务禁用状态
strSQL = string . Format ( @ "SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS IN ('Disable')
and device_code = ' { 0 } ' and CELL_STATUS = ' Nohave ' AND RUN_STATUS_NEAR = ' Enable '
AND CELL_STATUS_NEAR = ' Nohave ' ORDER BY { 1 } CELL_Y , CELL_X ", DEVICE_CODE, sOrderSQL);
dtCELL = this . GetList ( strSQL ) ;
if ( dtCELL . Rows . Count > 0 )
{
END_CELL_ID = Convert . ToInt32 ( dtCELL . Rows [ 0 ] [ "CELL_ID_NEAR" ] . ToString ( ) ) ;
SiaSun . LMS . Model . WH_CELL mEND_WH_CELL = this . _ P_WH_CELL . GetModel ( END_CELL_ID ) ;
mEND_WH_CELL . RUN_STATUS = Enum . RUN_STATUS . Selected . ToString ( ) ;
this . _ P_WH_CELL . Update ( mEND_WH_CELL ) ;
return true ;
}
///条件3:
///Double无任务,货位状态空容器-运行状态为可用/禁用,选择Normal空货位
strSQL = string . Format ( @ "SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS IN ('Disable','Enable')
AND CELL_STATUS IN ( ' Pallet ' ) AND RUN_STATUS_NEAR = ' Enable '
AND DEVICE_CODE = { 0 } AND CELL_STATUS_NEAR = ' Nohave '
ORDER BY { 1 } CELL_Y , CELL_X ", DEVICE_CODE, sOrderSQL);
dtCELL = this . GetList ( strSQL ) ;
if ( dtCELL . Rows . Count ! = 0 )
{
END_CELL_ID = Convert . ToInt32 ( dtCELL . Rows [ 0 ] [ "CELL_ID_NEAR" ] . ToString ( ) ) ;
SiaSun . LMS . Model . WH_CELL mEND_WH_CELL = this . _ P_WH_CELL . GetModel ( END_CELL_ID ) ;
mEND_WH_CELL . RUN_STATUS = Enum . RUN_STATUS . Selected . ToString ( ) ;
this . _ P_WH_CELL . Update ( mEND_WH_CELL ) ;
return true ;
}
///条件4:
///Double和Normal全部空货位,选择Double空货位
strSQL = string . Format ( @ "SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable' AND CELL_STATUS = 'Nohave'
AND RUN_STATUS_NEAR = ' Enable ' AND CELL_STATUS_NEAR = ' Nohave ' AND DEVICE_CODE = { 0 }
ORDER BY { 1 } CELL_Y , CELL_X ", DEVICE_CODE, sOrderSQL);
dtCELL = this . GetList ( strSQL ) ;
if ( dtCELL . Rows . Count = = 0 )
{
strSQL = string . Format ( @ "SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable' AND CELL_STATUS = 'Full'
AND RUN_STATUS_NEAR = ' Enable ' AND CELL_STATUS_NEAR = ' Nohave ' AND DEVICE_CODE = { 0 }
ORDER BY { 1 } CELL_Y , CELL_X ", DEVICE_CODE, sOrderSQL);
dtCELL = this . GetList ( strSQL ) ;
if ( dtCELL . Rows . Count = = 0 )
{
bResult = false ;
sResult = "当前双申巷道空货位货位不足,请查看!" ;
END_CELL_ID = 0 ;
return bResult ;
}
else
{
END_CELL_ID = Convert . ToInt32 ( dtCELL . Rows [ 0 ] [ "CELL_ID_NEAR" ] . ToString ( ) ) ;
SiaSun . LMS . Model . WH_CELL mEND_WH_CELL = this . _ P_WH_CELL . GetModel ( END_CELL_ID ) ;
mEND_WH_CELL . RUN_STATUS = Enum . RUN_STATUS . Selected . ToString ( ) ;
this . _ P_WH_CELL . Update ( mEND_WH_CELL ) ;
return true ;
}
}
else
{
END_CELL_ID = Convert . ToInt32 ( dtCELL . Rows [ 0 ] [ "CELL_ID_FAR" ] . ToString ( ) ) ;
SiaSun . LMS . Model . WH_CELL mEND_WH_CELL = this . _ P_WH_CELL . GetModel ( END_CELL_ID ) ;
mEND_WH_CELL . RUN_STATUS = Enum . RUN_STATUS . Selected . ToString ( ) ;
this . _ P_WH_CELL . Update ( mEND_WH_CELL ) ;
return true ;
}
}
#endregion
#region 货物入库
else
{
//分配的巷道为双申巷道
///条件1:
///Double有货无任务,且Double物料与上架物料批次一致时,选择Normal空货位
///
//低货位
string sCellSQL = string . Empty ;
if ( gm . GOODS_CLASS_ID = = 1 | |
gm . GOODS_CLASS_ID = = 5 )
{
sCellSQL = "and CELL_X>1" ;
}
if ( CELL_MODEL . Equals ( "low" ) )
{
strSQL = string . Format ( @ "SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable'
AND DEVICE_CODE = ' { 0 } '
AND CELL_STATUS in ( ' Full ',' Bullet ' )
AND RUN_STATUS_NEAR = ' Enable '
AND CELL_STATUS_NEAR = ' Nohave '
{ 4 }
{ 2 }
AND GOODS_ID = { 3 }
ORDER BY { 5 } CELL_Y , CELL_X ",
DEVICE_CODE , CELL_MODEL , PnOrder , lsManageList [ 0 ] . GOODS_ID , sCellSQL , sOrderSQL ) ;
dtCELL = this . GetList ( strSQL ) ;
if ( dtCELL = = null | | dtCELL . Rows . Count < 1 )
{
//strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable'
// AND DEVICE_CODE='{0}'
// AND CELL_STATUS in('Full','Bullet')
// AND RUN_STATUS_NEAR = 'Enable'
// AND CELL_STATUS_NEAR ='Nohave'
// AND CELL_MODEL = '{4}'
// {3}
// {1}
// AND GOODS_ID = {2}
// ORDER BY CELL_Y,CELL_X",
// DEVICE_CODE, PnOrder, lsManageList[0].GOODS_ID, sCellSQL, CELL_MODEL);
//dtCELL = this.GetList(strSQL);
//if (dtCELL.Rows.Count > 0)
//{
// END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString());
// SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID);
// mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString();
// this._P_WH_CELL.Update(mEND_WH_CELL);
// return true;
//}
}
else
{
END_CELL_ID = Convert . ToInt32 ( dtCELL . Rows [ 0 ] [ "CELL_ID_NEAR" ] . ToString ( ) ) ;
SiaSun . LMS . Model . WH_CELL mEND_WH_CELL = this . _ P_WH_CELL . GetModel ( END_CELL_ID ) ;
mEND_WH_CELL . RUN_STATUS = Enum . RUN_STATUS . Selected . ToString ( ) ;
this . _ P_WH_CELL . Update ( mEND_WH_CELL ) ;
return true ;
}
}
else if ( CELL_MODEL . Equals ( "height" ) )
{
strSQL = string . Format ( @ "SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable'
AND DEVICE_CODE = ' { 0 } '
AND CELL_STATUS in ( ' Full ',' Bullet ' )
AND RUN_STATUS_NEAR = ' Enable '
AND CELL_STATUS_NEAR = ' Nohave '
AND CELL_MODEL = ' { 1 } '
{ 4 }
{ 2 }
AND GOODS_ID = { 3 }
ORDER BY { 5 } CELL_Y , CELL_X ",
DEVICE_CODE , CELL_MODEL , PnOrder , lsManageList [ 0 ] . GOODS_ID , sCellSQL , sOrderSQL ) ;
dtCELL = this . GetList ( strSQL ) ;
if ( dtCELL . Rows . Count > 0 )
{
END_CELL_ID = Convert . ToInt32 ( dtCELL . Rows [ 0 ] [ "CELL_ID_NEAR" ] . ToString ( ) ) ;
SiaSun . LMS . Model . WH_CELL mEND_WH_CELL = this . _ P_WH_CELL . GetModel ( END_CELL_ID ) ;
mEND_WH_CELL . RUN_STATUS = Enum . RUN_STATUS . Selected . ToString ( ) ;
this . _ P_WH_CELL . Update ( mEND_WH_CELL ) ;
return true ;
}
}
///条件2:Double 无货禁用状态
///
if ( CELL_MODEL . Equals ( "low" ) )
{
strSQL = string . Format ( @ "SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Disable'
AND DEVICE_CODE = ' { 0 } '
AND CELL_STATUS = ' Nohave '
AND RUN_STATUS_NEAR = ' Enable '
AND CELL_STATUS_NEAR = ' Nohave '
{ 2 }
ORDER BY { 3 } CELL_Y , CELL_X ",
DEVICE_CODE , CELL_MODEL , sCellSQL , sOrderSQL ) ;
dtCELL = this . GetList ( strSQL ) ;
if ( dtCELL = = null | | dtCELL . Rows . Count < 1 )
{
//strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Disable'
// AND DEVICE_CODE = '{0}'
// AND CELL_MODEL ='{2}'
// AND CELL_STATUS ='Nohave'
// AND RUN_STATUS_NEAR = 'Enable'
// AND CELL_STATUS_NEAR ='Nohave'
// {1}
// ORDER BY CELL_Y,CELL_X",
// DEVICE_CODE, sCellSQL, CELL_MODEL);
//dtCELL = this.GetList(strSQL);
//if (dtCELL.Rows.Count > 0)
//{
// END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString());
// SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID);
// mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString();
// this._P_WH_CELL.Update(mEND_WH_CELL);
// return true;
//}
}
else
{
END_CELL_ID = Convert . ToInt32 ( dtCELL . Rows [ 0 ] [ "CELL_ID_NEAR" ] . ToString ( ) ) ;
SiaSun . LMS . Model . WH_CELL mEND_WH_CELL = this . _ P_WH_CELL . GetModel ( END_CELL_ID ) ;
mEND_WH_CELL . RUN_STATUS = Enum . RUN_STATUS . Selected . ToString ( ) ;
this . _ P_WH_CELL . Update ( mEND_WH_CELL ) ;
return true ;
}
}
else if ( CELL_MODEL . Equals ( "height" ) )
{
strSQL = string . Format ( @ "SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Disable'
AND DEVICE_CODE = ' { 0 } '
AND CELL_MODEL = ' { 1 } '
AND CELL_STATUS = ' Nohave '
AND RUN_STATUS_NEAR = ' Enable '
AND CELL_STATUS_NEAR = ' Nohave '
{ 2 }
ORDER BY { 3 } CELL_Y , CELL_X ",
DEVICE_CODE , CELL_MODEL , sCellSQL , sOrderSQL ) ;
dtCELL = this . GetList ( strSQL ) ;
if ( dtCELL . Rows . Count > 0 )
{
END_CELL_ID = Convert . ToInt32 ( dtCELL . Rows [ 0 ] [ "CELL_ID_NEAR" ] . ToString ( ) ) ;
SiaSun . LMS . Model . WH_CELL mEND_WH_CELL = this . _ P_WH_CELL . GetModel ( END_CELL_ID ) ;
mEND_WH_CELL . RUN_STATUS = Enum . RUN_STATUS . Selected . ToString ( ) ;
this . _ P_WH_CELL . Update ( mEND_WH_CELL ) ;
return true ;
}
}
///条件4:
/// Double和Normal全部空货位,选择Double空货位
///
if ( CELL_MODEL . Equals ( "low" ) )
{
strSQL = string . Format ( @ "SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable'
AND CELL_STATUS = ' Nohave '
AND DEVICE_CODE = { 0 }
AND RUN_STATUS_NEAR = ' Enable '
AND CELL_STATUS_NEAR = ' Nohave '
{ 2 }
ORDER BY { 3 } CELL_Y , CELL_X ",
DEVICE_CODE , CELL_MODEL , sCellSQL , sOrderSQL ) ;
dtCELL = this . GetList ( strSQL ) ;
if ( dtCELL = = null | | dtCELL . Rows . Count < 1 )
{
//strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable'
// AND CELL_STATUS = 'Nohave'
// AND DEVICE_CODE = {0}
// AND RUN_STATUS_NEAR = 'Enable'
// AND CELL_STATUS_NEAR ='Nohave'
// {1}
// ORDER BY CELL_Y,CELL_X",
// DEVICE_CODE, sCellSQL);
//dtCELL = this.GetList(strSQL);
//if (dtCELL.Rows.Count > 0)
//{
// END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_FAR"].ToString());
// SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID);
// mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString();
// this._P_WH_CELL.Update(mEND_WH_CELL);
// return true;
//}
}
else
{
END_CELL_ID = Convert . ToInt32 ( dtCELL . Rows [ 0 ] [ "CELL_ID_FAR" ] . ToString ( ) ) ;
SiaSun . LMS . Model . WH_CELL mEND_WH_CELL = this . _ P_WH_CELL . GetModel ( END_CELL_ID ) ;
mEND_WH_CELL . RUN_STATUS = Enum . RUN_STATUS . Selected . ToString ( ) ;
this . _ P_WH_CELL . Update ( mEND_WH_CELL ) ;
return true ;
}
}
else if ( CELL_MODEL . Equals ( "height" ) )
{
strSQL = string . Format ( @ "SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable'
AND CELL_STATUS = ' Nohave '
AND DEVICE_CODE = { 0 }
AND CELL_MODEL = ' { 1 } '
AND RUN_STATUS_NEAR = ' Enable '
AND CELL_STATUS_NEAR = ' Nohave '
{ 2 }
ORDER BY { 3 } CELL_Y , CELL_X ",
DEVICE_CODE , CELL_MODEL , sCellSQL , sOrderSQL ) ;
dtCELL = this . GetList ( strSQL ) ;
if ( dtCELL . Rows . Count > 0 )
{
END_CELL_ID = Convert . ToInt32 ( dtCELL . Rows [ 0 ] [ "CELL_ID_FAR" ] . ToString ( ) ) ;
SiaSun . LMS . Model . WH_CELL mEND_WH_CELL = this . _ P_WH_CELL . GetModel ( END_CELL_ID ) ;
mEND_WH_CELL . RUN_STATUS = Enum . RUN_STATUS . Selected . ToString ( ) ;
this . _ P_WH_CELL . Update ( mEND_WH_CELL ) ;
return true ;
}
}
///条件5:
///Double有货无任务,选择Normal空货位
///
if ( CELL_MODEL . Equals ( "low" ) )
{
strSQL = string . Format ( @ "SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable'
AND DEVICE_CODE = ' { 0 } '
AND CELL_STATUS in ( ' Full ',' Bullet ' )
AND RUN_STATUS_NEAR = ' Enable '
AND CELL_STATUS_NEAR = ' Nohave '
{ 2 }
ORDER BY { 3 } CELL_Y , CELL_X ",
DEVICE_CODE , CELL_MODEL , sCellSQL , sOrderSQL ) ;
dtCELL = this . GetList ( strSQL ) ;
if ( dtCELL = = null | | dtCELL . Rows . Count < 1 )
{
//strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable'
// AND DEVICE_CODE='{0}'
// AND CELL_STATUS in('Full','Bullet')
// AND RUN_STATUS_NEAR = 'Enable'
// AND CELL_STATUS_NEAR ='Nohave'
// {1}
// ORDER BY CELL_Y,CELL_X",
// DEVICE_CODE, sCellSQL);
//dtCELL = this.GetList(strSQL);
//if (dtCELL.Rows.Count > 0)
//{
// END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString());
// SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID);
// mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString();
// this._P_WH_CELL.Update(mEND_WH_CELL);
// return true;
//}
}
else
{
END_CELL_ID = Convert . ToInt32 ( dtCELL . Rows [ 0 ] [ "CELL_ID_NEAR" ] . ToString ( ) ) ;
SiaSun . LMS . Model . WH_CELL mEND_WH_CELL = this . _ P_WH_CELL . GetModel ( END_CELL_ID ) ;
mEND_WH_CELL . RUN_STATUS = Enum . RUN_STATUS . Selected . ToString ( ) ;
this . _ P_WH_CELL . Update ( mEND_WH_CELL ) ;
return true ;
}
}
else if ( CELL_MODEL . Equals ( "height" ) )
{
strSQL = string . Format ( @ "SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS = 'Enable'
AND DEVICE_CODE = ' { 0 } '
AND CELL_STATUS in ( ' Full ',' Bullet ' )
AND RUN_STATUS_NEAR = ' Enable '
AND CELL_STATUS_NEAR = ' Nohave '
AND CELL_MODEL = ' { 1 } '
{ 2 }
ORDER BY { 3 } CELL_Y , CELL_X ",
DEVICE_CODE , CELL_MODEL , sCellSQL , sOrderSQL ) ;
dtCELL = this . GetList ( strSQL ) ;
if ( dtCELL . Rows . Count > 0 )
{
END_CELL_ID = Convert . ToInt32 ( dtCELL . Rows [ 0 ] [ "CELL_ID_NEAR" ] . ToString ( ) ) ;
SiaSun . LMS . Model . WH_CELL mEND_WH_CELL = this . _ P_WH_CELL . GetModel ( END_CELL_ID ) ;
mEND_WH_CELL . RUN_STATUS = Enum . RUN_STATUS . Selected . ToString ( ) ;
this . _ P_WH_CELL . Update ( mEND_WH_CELL ) ;
return true ;
}
}
///条件6:
///Double全部为实货位,运行状态为禁用,Double物料与上架物料的批次不同,选择Normal空货位
///
if ( CELL_MODEL . Equals ( "low" ) )
{
strSQL = string . Format ( @ "SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS in ('Disable')
AND CELL_STATUS in ( ' Full ',' Bullet ' )
AND DEVICE_CODE = { 0 }
AND RUN_STATUS_NEAR = ' Enable '
AND CELL_STATUS_NEAR = ' Nohave '
{ 2 }
ORDER BY { 3 } CELL_Y , CELL_X ",
DEVICE_CODE , CELL_MODEL , sCellSQL , sOrderSQL ) ;
dtCELL = this . GetList ( strSQL ) ;
if ( dtCELL = = null | | dtCELL . Rows . Count < 1 )
{
//strSQL = string.Format(@"SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS in ('Enable','Disable')
// AND CELL_STATUS in ('Full','Forbiden','Bullet')
// AND DEVICE_CODE = {0}
// AND RUN_STATUS_NEAR = 'Enable'
// AND CELL_STATUS_NEAR ='Nohave'
// {1}
// ORDER BY CELL_Y,CELL_X",
// DEVICE_CODE, sCellSQL);
//dtCELL = this.GetList(strSQL);
//if (dtCELL.Rows.Count == 0)
//{
// bResult = false;
// END_CELL_ID = 0;
// sResult = "无法找到入库货位";
// return bResult;
//}
//else
//{
// END_CELL_ID = Convert.ToInt32(dtCELL.Rows[0]["CELL_ID_NEAR"].ToString());
// SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID);
// mEND_WH_CELL.RUN_STATUS = Enum.RUN_STATUS.Selected.ToString();
// this._P_WH_CELL.Update(mEND_WH_CELL);
// return true;
//}
}
else
{
END_CELL_ID = Convert . ToInt32 ( dtCELL . Rows [ 0 ] [ "CELL_ID_NEAR" ] . ToString ( ) ) ;
SiaSun . LMS . Model . WH_CELL mEND_WH_CELL = this . _ P_WH_CELL . GetModel ( END_CELL_ID ) ;
mEND_WH_CELL . RUN_STATUS = Enum . RUN_STATUS . Selected . ToString ( ) ;
this . _ P_WH_CELL . Update ( mEND_WH_CELL ) ;
return true ;
}
}
else if ( CELL_MODEL . Equals ( "height" ) )
{
strSQL = string . Format ( @ "SELECT top 1 * FROM V_WH_CELL_DOUBLE_TO_NORMAL WHERE RUN_STATUS in ('Enable','Disable')
AND CELL_STATUS in ( ' Full ',' Bullet ' )
AND DEVICE_CODE = { 0 }
AND CELL_MODEL = ' { 1 } '
AND RUN_STATUS_NEAR = ' Enable '
AND CELL_STATUS_NEAR = ' Nohave '
{ 2 }
ORDER BY { 3 } CELL_Y , CELL_X ",
DEVICE_CODE , CELL_MODEL , sCellSQL , sOrderSQL ) ;
dtCELL = this . GetList ( strSQL ) ;
if ( dtCELL . Rows . Count = = 0 )
{
bResult = false ;
END_CELL_ID = 0 ;
sResult = "无法找到入库高货位" ;
return bResult ;
}
else
{
END_CELL_ID = Convert . ToInt32 ( dtCELL . Rows [ 0 ] [ "CELL_ID_NEAR" ] . ToString ( ) ) ;
SiaSun . LMS . Model . WH_CELL mEND_WH_CELL = this . _ P_WH_CELL . GetModel ( END_CELL_ID ) ;
mEND_WH_CELL . RUN_STATUS = Enum . RUN_STATUS . Selected . ToString ( ) ;
this . _ P_WH_CELL . Update ( mEND_WH_CELL ) ;
return true ;
}
}
bResult = false ;
END_CELL_ID = 0 ;
sResult = "无法找到入库货位" ;
return bResult ;
}
#endregion
}
/// <summary>
/// 根据起始位置分配终止位置,适合终止位置为固定授货台
/// </summary>成品库获得出库站台
/// <param name="START_DEVICE_CODE"></param>
/// <param name="END_CELL_ID"></param>
/// <param name="sResult"></param>
/// <returns></returns>
public bool CellOutAllocate ( string START_DEVICE_CODE , out int END_CELL_ID , out string sResult )
{
bool bResult = false ;
sResult = string . Empty ;
int index = 0 ;
string strSQL = string . Empty ;
DataTable dt = null ;
END_CELL_ID = 0 ;
//出库-》站台
strSQL = string . Format ( @ "SELECT CELL_ID,CELL_CODE FROM WH_CELL
WHERE CELL_TYPE = ' Station '
AND CELL_INOUT = ' Out '
AND CELL_CODE IN ( SELECT END_DEVICE FROM IO_CONTROL_ROUTE
WHERE START_DEVICE = ( SELECT DEVICE_CODE FROM WH_CELL WHERE CELL_CODE = ' { 0 } ' )
AND CONTROL_ROUTE_STATUS = 1 ) ",
START_DEVICE_CODE ) ;
dt = this . GetList ( strSQL ) ;
bResult = dt . Rows . Count > 0 ;
if ( bResult )
{
//两个以上(包含两个)可用站台
if ( dt . Rows . Count > 1 )
{
DataTable dt_manage = null ;
int [ ] su = new int [ dt . Rows . Count ] ;
for ( int i = 0 ; i < dt . Rows . Count ; i + + )
{
dt_manage = this . GetList ( string . Format ( @ "SELECT MANAGE_ID FROM MANAGE_MAIN
WHERE END_CELL_ID = { 0 } ",
Convert . ToInt32 ( dt . Rows [ i ] [ "CELL_ID" ] ) ) ) ;
su [ i ] = dt_manage . Rows . Count ;
}
index = SiaSun . LMS . Common . StringUtil . CheckMin ( su ) ;
END_CELL_ID = Convert . ToInt32 ( dt . Rows [ index ] [ "CELL_ID" ] ) ;
}
else
{
END_CELL_ID = Convert . ToInt32 ( dt . Rows [ 0 ] [ "CELL_ID" ] ) ;
}
}
else
{
sResult = string . Format ( "未找到出库货位" ) ;
return false ;
}
if ( END_CELL_ID = = 0 )
return false ;
else
return true ;
}
/// <summary>获得出库货位
/// 四川电力 根据巷道 物料及物料属性 获得出库货位
/// </summary>
/// <param name="IO_TASK_NO"></param>
/// <param name="LANE_WAY"></param>
/// <param name="END_CELL_ID"></param>
/// <param name="GOODS_ID"></param>
/// <param name="GOODS_PROPERTY"></param>
/// <param name="STORAGE_LIST_TYPE"></param>
/// <param name="MANAGE_LIST_QUANTITY"></param>
/// <param name="START_CELL_ID"></param>
/// <param name="STOCK_BARCODE"></param>
/// <param name="STORAGE_LIST_QUANTITY"></param>
/// <param name="sResult"></param>
/// <returns></returns>
public bool CellOutAllocate ( int LANE_WAY ,
int END_CELL_ID ,
int GOODS_ID ,
string GOODS_PROPERTY ,
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 '
GROUP BY STOCK_BARCODE ,
STORAGE_MAIN . CELL_ID ,
CELL_Y ,
CELL_X
ORDER BY
max ( substring ( ENTRY_TIME , 0 , 1 1 ) ) ,
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 . Pallet . ToString ( ) ) ,
/*1*/ string . Format ( " AND RUN_STATUS = '{0}'" , SiaSun . LMS . Enum . RUN_STATUS . Enable . ToString ( ) ) ,
/*2*/ GOODS_ID ,
/*3*/ GOODS_PROPERTY ,
/*4*/ LANE_WAY ,
/*5*/ MANAGE_LIST_QUANTITY ) ;
///*6自动检定必须是24*/(GOODS_ID.Equals(1) && mWH_CELL.CELL_CODE.Equals("22004")) ? " HAVING ISNULL(SUM(STORAGE_LIST_QUANTITY),0) = 24" : string.Empty);
//,
///*7任务号*/ string.IsNullOrEmpty(IO_TASK_NO)?
//string.Format(" and ( IO_TASK_NO = '' or IO_TASK_NO is null)"):
//string.Format(" and ( IO_TASK_NO = '{0}' or IO_TASK_NO = '' or IO_TASK_NO is null)", IO_TASK_NO)
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 ;
}
/// <summary>
/// 四川电力 根据物料及物料属性获得出库巷道
/// </summary>
/// <param name="START_WAREHOUSE_ID"></param>
/// <param name="START_AREA_ID"></param>
/// <param name="START_LOGIC_ID"></param>
/// <param name="END_CELL_ID"></param>
/// <param name="GOODS_ID"></param>
/// <param name="GOODS_PROPERTY"></param>
/// <param name="STORAGE_LIST_TYPE"></param>
/// <param name="dtLANEWAY"></param>
/// <param name="sResult"></param>
/// <returns></returns>
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 AND CONTROL_ROUTE_TYPE = 2 )
{ 0 }
{ 1 }
GROUP BY LANE_WAY , DEVICE_CODE ",
/*0*/ string . Format ( " AND ( CELL_STATUS = '{0}' or CELL_STATUS = '{1}') " , SiaSun . LMS . Enum . CELL_STATUS . Full . ToString ( ) , SiaSun . LMS . Enum . CELL_STATUS . Pallet . 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 ;
}
/// <summary>
/// 根据配盘方案 获得出库巷道
/// </summary>
/// <param name="END_CELL_ID"></param>
/// <param name="GOODS_ID"></param>
/// <param name="GOODS_PROPERTY_CONDITION"></param>
/// <param name="dtLANEWAY"></param>
/// <param name="sResult"></param>
/// <returns></returns>
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 ;
}
/// <summary>
/// 计划出库根据物料及物料属性获得出库巷道
/// </summary>
/// <param name="START_WAREHOUSE_ID"></param>
/// <param name="START_AREA_ID"></param>
/// <param name="START_LOGIC_ID"></param>
/// <param name="END_CELL_ID"></param>
/// <param name="GOODS_ID"></param>
/// <param name="GOODS_PROPERTY"></param>
/// <param name="STORAGE_LIST_TYPE"></param>
/// <param name="dtLANEWAY"></param>
/// <param name="sResult"></param>
/// <returns></returns>
public bool LaneWayGetListPlan ( int END_CELL_ID ,
int GOODS_ID ,
string GOODS_PROPERTY_CONDITION ,
out DataTable dtLANEWAY ,
out string sResult )
{
bool bResult = true ;
dtLANEWAY = null ;
string sSQL = string . Empty ;
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 ;
}
if ( GOODS_ID = = - 1 | | GOODS_ID = = 1 0 2 ) //托盘和货笼
{
sSQL = string . Format ( @ "SELECT DEVICE_CODE,
LANE_WAY ,
SUM ( STORAGE_LIST_QUANTITY ) AS STORAGE_BALANCE ,
SUM ( 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}' or CELL_STATUS = '{1}') " , SiaSun . LMS . Enum . CELL_STATUS . Full . ToString ( ) , SiaSun . LMS . Enum . CELL_STATUS . Pallet . 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
) ;
}
else if ( GOODS_ID = = 3 ) //成品
{
sSQL = string . Format ( @ "SELECT DEVICE_CODE,
LANE_WAY ,
SUM ( STORAGE_LIST_QUANTITY ) AS STORAGE_BALANCE ,
SUM ( DEVICE_CODE ) AS OUT_TASK_BALANCE
FROM V_STORAGE_LIST
WHERE GOODS_ID = { 2 } AND
GOODS_PROPERTY1 = ' { 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}' or CELL_STATUS = '{1}') " , SiaSun . LMS . Enum . CELL_STATUS . Full . ToString ( ) , SiaSun . LMS . Enum . CELL_STATUS . Pallet . 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
) ;
}
else
{
sSQL = string . Format ( @ "SELECT DEVICE_CODE,
LANE_WAY ,
SUM ( STORAGE_LIST_QUANTITY ) AS STORAGE_BALANCE ,
SUM ( 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}' or CELL_STATUS = '{1}') " , SiaSun . LMS . Enum . CELL_STATUS . Full . ToString ( ) , SiaSun . LMS . Enum . CELL_STATUS . Pallet . 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 ;
}
/// <summary>货位-更改状态
/// 货位-更改状态
/// </summary>
/// <param name="CELL_ID">货位编号</param>
/// <param name="CELL_TYPE">货位类型</param>
/// <param name="CELL_STATUS">存储状态</param>
/// <param name="RUN_STATUS">运行状态</param>
/// <param name="sResult">返回值</param>
/// <returns></returns>
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 ;
}
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 = = Enum . CELL_TYPE . Cell . ToString ( ) | |
mWH_CELL . CELL_STORAGE_TYPE = = Enum . CELL_STORAGE_TYPE . Single . ToString ( ) )
{
try
{
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 ;
}
}
return bResult ;
}
}
}