大连融科 WMS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

375 lines
18 KiB

using System;
using System.Reflection;
using System.Data;
using System.Collections.Generic;
namespace SiaSun.LMS.Implement
{
/// <summary>
/// 申请上架
/// </summary>
public class ApplyMoveUp : ApplyBase
{
public bool ApplyHandle(Model.IO_CONTROL_APPLY mIO_CONTROL_APPLY, out string sResult)
{
bool bResult = true;
sResult = string.Empty;
int START_CELL_ID = 0;
int end_cell_id = 0;
string applycell = string.Empty;
string sql4=string.Empty;
string sql5=string.Empty;
string sql3= string.Empty;
string sql6=string.Empty;
DataTable dt4;
DataTable dt5;
try
{
//bResult = this.Validate(mIO_CONTROL_APPLY, out START_CELL_ID,out sResult);
//if (!bResult)
//{
// return bResult;
//}
////调度申请,检测尺寸等报错回退
//if (!string.IsNullOrEmpty(mIO_CONTROL_APPLY.CONTROL_ERROR_TEXT))
//{
// bResult = false;
// return bResult;
//}
//string STOCK_BARCODE =mIO_CONTROL_APPLY.STOCK_BARCODE.ToUpper();
applycell = "0" + mIO_CONTROL_APPLY.DEVICE_CODE.TrimEnd().Substring(1, 1) + "-"
+ mIO_CONTROL_APPLY.DEVICE_CODE.TrimEnd().Substring(2, 2) + "-" + "0"
+ mIO_CONTROL_APPLY.DEVICE_CODE.TrimEnd().Substring(4, 1);
this._log.Fatal(string.Format("成功申请{0} {1} {2} {3}", mIO_CONTROL_APPLY.CONTROL_APPLY_ID, applycell, mIO_CONTROL_APPLY.CONTROL_ID,mIO_CONTROL_APPLY.DEVICE_CODE));
//查申请翻转货位的库存
string sql1 = string.Format("select * from v_storage_list where CELL_CODE='{0}'", applycell);
DataTable dt1 = this.GetList(sql1);
//查申请站台ID
if (mIO_CONTROL_APPLY.DEVICE_CODE.Equals("12001")|| mIO_CONTROL_APPLY.DEVICE_CODE.Equals("12002") || mIO_CONTROL_APPLY.DEVICE_CODE.Equals("12003"))
{
sql3 = string.Format("select * from wh_cell where cell_code='{0}'", mIO_CONTROL_APPLY.DEVICE_CODE);
}
else
{
sql3 = string.Format("select * from wh_cell where cell_code='{0}'", applycell);
}
DataTable dt3 = this.GetList(sql3);
///查暂存区GOODS_ID
#region 校验条码格式
//if (STOCK_BARCODE.Substring(0, 1).ToString() != "T" && STOCK_BARCODE.Substring(0, 1).ToString() != "A"
// && STOCK_BARCODE.Substring(0, 1).ToString() != "B")
//{
// bResult = false;
// sResult = string.Format("条码格式不正确!");
// return bResult;
//}
#endregion
//大连融科 12003下层空托回流 生成唯一码,时间戳代表条码
if (mIO_CONTROL_APPLY.DEVICE_CODE.Equals("12003"))
{
string STOCK_BARCODE = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() +
DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString();
//入到正常货位里面,入空盘,
bResult = new StockIn().ManageCreateBind(STOCK_BARCODE.TrimEnd(), Convert.ToInt32(dt3.Rows[0]["CELL_ID"].ToString()), 0, "0", "0", true, true, "SYS", out sResult);
return bResult;
}
#region 查管理和调度任务
if (!string.IsNullOrEmpty(mIO_CONTROL_APPLY.STOCK_BARCODE))
{
//查管理任务
sql4 = string.Format("select * from manage_main where stock_barcode='{0}'", mIO_CONTROL_APPLY.STOCK_BARCODE);
dt4 = this.GetList(sql4);
//查调度任务
sql5 = string.Format("select * from io_control where stock_barcode='{0}'", mIO_CONTROL_APPLY.STOCK_BARCODE);
dt5 = this.GetList(sql5);
}
else
{
//查管理任务
sql4 = string.Format("select * from manage_main where stock_barcode='{0}'", mIO_CONTROL_APPLY.STOCK_BARCODE);
dt4 = this.GetList(sql4);
//查调度任务
sql5 = string.Format("select * from io_control where stock_barcode='{0}'", mIO_CONTROL_APPLY.STOCK_BARCODE);
dt5 = this.GetList(sql5);
}
#endregion
#region 查CELL_ID
/////查暂存区CELL_ID
//string sql6 = string.Format("SELECT CELL_ID FROM WH_CELL WHERE CELL_CODE = 'zcq'");
//DataTable dt6 = this.GetList(sql6);
///查CELL_ID
string sql7 = string.Format("SELECT CELL_ID FROM WH_CELL WHERE CELL_CODE = '{0}'",mIO_CONTROL_APPLY.DEVICE_CODE);
DataTable dt7 = this.GetList(sql7);
#endregion
//查翻转机构库存,CELL_LOGICAL_NAME是FZ就是翻转货位
string sqlfz = string.Format("select * from wh_cell where cell_status='Nohave' and run_status='Enable' and CELL_LOGICAL_NAME = 'FZ'");
DataTable dtfz = this.GetList(sqlfz);
///查库内空盘数量,如果无,就回库
string sql8 = string.Format("select * from v_storage_list where CELL_STATUS='Pallet' and AREA_TYPE = 'LiKu'");
DataTable dt8 = this.GetList(sql8);
///查库内空盘数量,如果无,就回库
string sql9 = string.Format("select * from v_manage where manage_type_code='StockIn'");
DataTable dt9 = this.GetList(sql9);
///查库内空盘入库数量
string sqlwj = string.Format("select * from WH_CELL where logic_id='1' and cell_status='Nohave' and run_status='Enable'");
DataTable dt_wj = this.GetList(sqlwj);
string CELL_MODEL = string.Empty;
////电气申请入48个翻转机构,如果翻转机构没有可用,则入正常货位
if (mIO_CONTROL_APPLY.DEVICE_CODE == "12001")
{
//sql6 = string.Format(@"SELECT GOODS_ID FROM GOODS_MAIN WHERE GOODS_CODE = '{0}'", mIO_CONTROL_APPLY.STOCK_BARCODE.Substring(0, 12));
//DataTable dt6 = this.GetList(sql6);
//if (dt6.Rows.Count <= 0)
//{
// sResult = "";
// return false;
//}
//调用入库函数配盘入库 暂存区库存
SiaSun.LMS.Model.MANAGE_MAIN mMANAGE_MAIN = new Model.MANAGE_MAIN();
List<Model.MANAGE_LIST> listMANAGE_LIST =new List<Model.MANAGE_LIST>();
Model.MANAGE_LIST mANAGE_LIST =new Model.MANAGE_LIST();
mMANAGE_MAIN.MANAGE_TYPE_CODE = "ManageIn";
mMANAGE_MAIN.STOCK_BARCODE = mIO_CONTROL_APPLY.STOCK_BARCODE;
mMANAGE_MAIN.CELL_MODEL = "0";
mMANAGE_MAIN.START_CELL_ID = 16644;
mMANAGE_MAIN.END_CELL_ID = 16644;
mMANAGE_MAIN.MANAGE_OPERATOR = "SYS";
mMANAGE_MAIN.MANAGE_BEGIN_TIME = SiaSun.LMS.Common.StringUtil.GetDateTime();
mMANAGE_MAIN.MANAGE_STATUS = SiaSun.LMS.Enum.MANAGE_STATUS.WaitingSend.ToString();
mMANAGE_MAIN.FULL_FLAG = "1";
mMANAGE_MAIN.MANAGE_LEVEL = string.Empty;
mMANAGE_MAIN.MANAGE_REMARK = string.Empty;
////根据物料条码里面哪几位能看出是什么物料,获取goods_id
// mANAGE_LIST.GOODS_ID = Convert.ToInt32(dt6.Rows[0]["GOODS_ID"].ToString());
//现场无法提供物料唯一编码,均按一种物料来保存,记录唯一码做托盘码,截取某一位(条码第14位,把-改成L)作为L\R。
mANAGE_LIST.GOODS_ID = 3103;
mANAGE_LIST.GOODS_PROPERTY1 = mIO_CONTROL_APPLY.STOCK_BARCODE.Substring(13, 1);
//GY GK,保存K,Y....
mANAGE_LIST.GOODS_PROPERTY2 = mIO_CONTROL_APPLY.STOCK_BARCODE.Substring(5, 1);
mANAGE_LIST.MANAGE_ID = 0;
mANAGE_LIST.PLAN_LIST_ID = 0;
mANAGE_LIST.MANAGE_LIST_QUANTITY = 1;
mANAGE_LIST.MANAGE_LIST_REMARK = "";
mANAGE_LIST.STORAGE_LIST_ID = 0;
mANAGE_LIST.MANAGE_LIST_ID = 0;
listMANAGE_LIST.Add(mANAGE_LIST);
////入到正常货位里面,logic_area=0传入,实际是用CELL_LOGIC_NAME来找的翻转货位,CELL表里面用CELL_LOGIC_NAME为FZ标记翻转货位,
bResult = new ManageIn().ManageCreate(mMANAGE_MAIN, listMANAGE_LIST, true, true,false, out sResult);
if (!bResult)
{
bResult = false;
sResult = string.Format("托盘条码[{0}]未能生成暂存区库存!", mIO_CONTROL_APPLY.STOCK_BARCODE);
return bResult;
}
//return bResult;
// bool bResult = false;
//bResult = MainApp._I_BaseService.Invoke(mMANAGE_TYPE.MANAGE_TYPE_CLASS.TrimEnd(),
// "ManageCreate",
// new object[] { mMANAGE_MAIN,
// listMANAGE_LIST,
// true,
// true,
// false,
// },
// out strResult);
//校验立库库存,有库存报错
if (!this._S_StorageService.StorageCheck(mIO_CONTROL_APPLY.STOCK_BARCODE.TrimEnd(), "LiKu", out sResult))
{
///上报高度
CELL_MODEL = "0";
//有管理和控制任务不能入库
if (dt4.Rows.Count > 0 || dt5.Rows.Count > 0)
{
bResult = false;
sResult = string.Format("托盘条码[{0}]存在未完成的任务!", mIO_CONTROL_APPLY.STOCK_BARCODE);
return bResult;
}
////判断是否组过盘,是否有暂存区库存
//if (dt1.Rows.Count <= 0)
//{
// bResult = false;
// sResult = string.Format("托盘条码[{0}]无暂存区库存,请组盘(MES是否调用组盘信息或是否经过人工组盘)!", mIO_CONTROL_APPLY.STOCK_BARCODE);
// return bResult;
//}
//判断翻转是否有可用货位
if (dtfz.Rows.Count <= 0)
{
//入到正常货位里面,logic_area=0传入,实际是用CELL_LOGIC_NAME来找的翻转货位,CELL表里面用CELL_LOGIC_NAME为FZ标记翻转货位,
bResult = new ManageUp().ManageCreate(mIO_CONTROL_APPLY.STOCK_BARCODE.TrimEnd(), Convert.ToInt32(dt7.Rows[0]["CELL_ID"].ToString()), end_cell_id, "0", "0", true, true, "SYS", out sResult);
return bResult;
}
else
{
//入到翻转货位里面 logic_area='FZ',传入,实际是用CELL_LOGIC_NAME来找的翻转货位,CELL表里面用CELL_LOGIC_NAME为FZ标记翻转货位
bResult = new ManageUp().ManageCreate(mIO_CONTROL_APPLY.STOCK_BARCODE.TrimEnd(), Convert.ToInt32(dt7.Rows[0]["CELL_ID"].ToString()), end_cell_id, "0", "FZ", true, true, "SYS", out sResult);
return bResult;
#region \\控制任务 暂时用不上
//SiaSun.LMS.Model.IO_CONTROL mIO_CONTROL = new SiaSun.LMS.Model.IO_CONTROL();
//mIO_CONTROL.RELATIVE_CONTROL_ID = -1;
//mIO_CONTROL.MANAGE_ID = 0;
//mIO_CONTROL.STOCK_BARCODE = mIO_CONTROL_APPLY.STOCK_BARCODE;
//mIO_CONTROL.CONTROL_TASK_LEVEL = "0";
//mIO_CONTROL.PRE_CONTROL_STATUS = string.Empty;
//mIO_CONTROL.CONTROL_TASK_TYPE = 4;
//mIO_CONTROL.START_DEVICE_CODE = mIO_CONTROL_APPLY.DEVICE_CODE;
//mIO_CONTROL.END_DEVICE_CODE = "12101";
//mIO_CONTROL.CONTROL_BEGIN_TIME = SiaSun.LMS.Common.StringUtil.GetDateTime();
//mIO_CONTROL.CONTROL_STATUS = 0;
//mIO_CONTROL.START_WAREHOUSE_CODE = "1";
//mIO_CONTROL.END_WAREHOUSE_CODE = "1";
//mIO_CONTROL.ERROR_TEXT = "";
//this._P_IO_CONTROL.Add(mIO_CONTROL);
#endregion
}
//IList<SiaSun.LMS.Model.STORAGE_MAIN> mlSTORAGE_MAIN = this._P_STORAGE_MAIN.GetListStockBarcode(mIO_CONTROL_APPLY.STOCK_BARCODE);
//mlSTORAGE_MAIN[0].STORAGE_ID = Convert.ToInt32(dt1.Rows[0]["STORAGE_ID"]);
//mlSTORAGE_MAIN[0].CELL_MODEL = CELL_MODEL;
//this._P_STORAGE_MAIN.Update(mlSTORAGE_MAIN[0]);
}
else
{
bResult = false;
sResult = string.Format("托盘条码[{0}]已有立库库存!", mIO_CONTROL_APPLY.STOCK_BARCODE);
return bResult;
}
}
#region //48个翻转机构申请,翻转完,电气申请入库正常货位
if (mIO_CONTROL_APPLY.DEVICE_CODE != "12001")
{
if(dt1.Rows.Count<=0)
{
sResult = "该物料没有库存信息,不能倒库";
bResult = false;
return bResult;
}
//申请时候,代表完成翻转,将物料属性6,变成已翻转,也可以任务完成时候再更新,因为申请了,就只能代表翻转。
this.ExecuteNonQuery_ReturnInt(string.Format(@"update STORAGE_LIST set goods_property6='已翻转' WHERE STORAGE_ID='{0}'",Convert.ToInt32(dt1.Rows[0]["STORAGE_ID"])));
string strSQL = string.Format(@"SELECT * FROM WH_CELL WHERE 1=1 AND CELL_STATUS = 'Nohave' and cell_type='cell' and area_id=1
AND RUN_STATUS = 'Enable' and cell_z='{0}' and CELL_LOGICAL_NAME!='FZ' ORDER BY CELL_X,CELL_Y,CELL_Z", dt3.Rows[0]["cell_z"].ToString());
DataTable dt_end = this.GetList(strSQL);
if (dt_end.Rows.Count<=0)
{
sResult = "没有可用货位,不能倒库";
bResult = false;
return bResult;
}
//获取申请货位信息
Model.WH_CELL wh= this._P_WH_CELL.GetModel(applycell);
//查申请选择货位库存
Model.STORAGE_MAIN sTORAGE_MAIN= this._P_STORAGE_MAIN.GetModelCellID(Convert.ToInt32(wh.CELL_ID));
bResult = new ManageMove().ManageCreate(sTORAGE_MAIN.STOCK_BARCODE.TrimEnd(), Convert.ToInt32(dt_end.Rows[0]["CELL_ID"].ToString()), true, true, "SYS", out sResult);
//return bResult;
}
#endregion
int cell_id =Convert.ToInt32(dt3.Rows[0]["cell_id"].ToString());
}
catch (Exception ex)
{
bResult = false;
sResult = ex.Message;
this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex);
}
finally
{
if (!bResult)
{
////南侧入口申请失败或者东侧碟盘申请失败送到出口
//if (mIO_CONTROL_APPLY.DEVICE_CODE == "12094" )
//{
// this.CreateApplyExceptionTask(mIO_CONTROL_APPLY,"12097",sResult);
//}
////南侧入口申请失败或者东侧碟盘申请失败送到出口
//if (mIO_CONTROL_APPLY.DEVICE_CODE == "12052")
//{
// this.CreateApplyExceptionTask(mIO_CONTROL_APPLY, "12101", sResult);
//}
////ManageBase led = new ManageBase();
//// led.updateLedText(START_CELL_ID, 1, sResult);
}
//南侧入口申请失败或者东侧碟盘申请失败送到出口
//if (!sResult.Equals("路径不通或无可用巷道,查看是否有报警或货位已满"))
//{
this.WriteHisData(mIO_CONTROL_APPLY, sResult);
//}
}
return bResult;
}
}
}