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