using System; using System.Collections.Generic; using System.Text; using System.ServiceModel; using System.Data; using System.Collections; using System.Linq; using SiaSun.LMS.Model; using SiaSun.LMS.Common; using System.Reflection; namespace SiaSun.LMS.Implement { [ServiceBehavior(IncludeExceptionDetailInFaults = true, InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple, MaxItemsInObjectGraph = int.MaxValue)] public partial class S_ManageService : S_BaseService, SiaSun.LMS.Interface.I_ManageService { private static readonly object lockObj = new object(); public S_ManageService() { } public bool ManageCreate(string sManageType, string sMethodName, object[] lsObj, out string sResult) { sResult = string.Empty; return false; } #region MANAGE_TYPE public IList ManageTypeParamGetList(int MANAGE_TYPE_ID) { return this._P_MANAGE_TYPE_PARAM.GetList(MANAGE_TYPE_ID); } #endregion #region MANAGE /// 任务-调用 /// 任务-调用 /// /// 任务类型 /// 方法 /// 参数 /// 返回结果 /// public bool InvokeManageService(string sManageType, string sMethodName, object[] lsObj, out string sResult) { bool bResult = true; sResult = string.Empty; string sClassFullName = string.Format("SiaSun.LMS.Implement.Manage.{0}", sManageType); List oPara = lsObj.ToList(); oPara.Add(sResult); Type t = this.GetType(); Assembly complierAssembly = t.Assembly; object complierInstance = complierAssembly.CreateInstance(sClassFullName); Type type = complierInstance.GetType(); object[] obj = oPara.ToArray(); object oResult = null; //创建反射的所有公用方法 MethodInfo[] lsMethodInfo = type.GetMethods(); bool bFind = false; foreach (MethodInfo methodInfo in lsMethodInfo) { if (methodInfo.Name.Equals(sMethodName) && oPara.Count.Equals(methodInfo.GetParameters().Length)) { oResult = methodInfo.Invoke(complierInstance, obj); bFind = true; break; } } if (!bFind) { bResult = false; sResult = string.Format("未找到{0}类型的{1}方法", sClassFullName, sMethodName); } else { bResult = Convert.ToBoolean(oResult); sResult = obj[oPara.Count - 1].ToString(); } //bResult = new SiaSun.LMS.Implement.Manage.ManageBase().Invoke(sClassFullName, sMethod, lsObj.ToList(), out sResult); return bResult; } #endregion #region CONTROL /// 作业-动作 /// 作业-动作 /// /// 库房编码 /// /// public void ControlTranslate(string WAREHOUSE) { string sResult = string.Empty; IList lsFLOW_PARA = this._S_FlowService.FlowGetParameters("FLOW_MANAGE"); string[] aFLOW_PARA = new string[lsFLOW_PARA.Count]; SiaSun.LMS.Model.MANAGE_ACTION_EXCUTE mt = new SiaSun.LMS.Model.MANAGE_ACTION_EXCUTE(); DataTable dt = this.GetList(string.Format("SELECT * FROM V_FLOW_CONTROL_ACTION ", WAREHOUSE)); foreach (DataRow dr in dt.Rows) { int i = 0; foreach (SiaSun.LMS.Model.FLOW_PARA mFLOW_PARA in lsFLOW_PARA) { aFLOW_PARA[i] = dr[mFLOW_PARA.FLOW_PARA_CODE].ToString(); i++; } mt.MANAGE_ID = Convert.ToInt32(dr["MANAGE_ID"]); mt.ACTION_EVENT = dr["FLOW_ACTION_EVENT"].ToString(); mt.ACTION_EVENT = string.Format(mt.ACTION_EVENT, aFLOW_PARA); bool bResult = new SiaSun.LMS.Implement.S_FlowService().ManageEventExecute(mt, out sResult); SiaSun.LMS.Model.IO_CONTROL mIO_CONTROL = this._P_IO_CONTROL.GetModel(Convert.ToInt32(dr["CONTROL_ID"])); if (!bResult) { if (sResult.Contains("牺牲")) { this._log.Error(string.Format("处理任务异常: {0}", sResult)); continue; } SiaSun.LMS.Model.MANAGE_MAIN mMANAGE_MAIN = this._P_MANAGE_MAIN.GetModel(mt.MANAGE_ID); mMANAGE_MAIN.MANAGE_STATUS = Enum.MANAGE_STATUS.Error.ToString(); mMANAGE_MAIN.MANAGE_REMARK = sResult + string.Format("【控制任务状态-{0}】", mIO_CONTROL.CONTROL_STATUS.ToString()); this._P_MANAGE_MAIN.Update(mMANAGE_MAIN); } if (bResult) { if (null != mIO_CONTROL) { mIO_CONTROL.PRE_CONTROL_STATUS = Convert.ToString(dr["CONTROL_STATUS"]); this._P_IO_CONTROL.Update(mIO_CONTROL); } } } } #endregion public bool RecordCreate(int MANAGE_ID, string sManageStatus, out string sResult) { bool bResult = true; sResult = string.Empty; SiaSun.LMS.Model.MANAGE_MAIN mMANAGE_MAIN = this._P_MANAGE_MAIN.GetModel(MANAGE_ID); if (null == mMANAGE_MAIN) { bResult = false; sResult = string.Format("任务号{0}不存在", MANAGE_ID); return bResult; } SiaSun.LMS.Model.RECORD_MAIN mRECORD_MAIN = new Model.RECORD_MAIN(); SiaSun.LMS.Model.RECORD_LIST mRECORD_LIST = null; SiaSun.LMS.Model.RECORD_DETAIL mRECORD_DETAIL = null; SiaSun.LMS.Model.PLAN_LIST mPLAN_LIST = null; SiaSun.LMS.Model.PLAN_MAIN mPLAN_MAIN = this._P_PLAN_MAIN.GetModel(mMANAGE_MAIN.PLAN_ID); SiaSun.LMS.Model.WH_CELL mSTART_WH_CELL = this._P_WH_CELL.GetModel(mMANAGE_MAIN.START_CELL_ID); SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(mMANAGE_MAIN.END_CELL_ID); try { if (mPLAN_MAIN != null) { mRECORD_MAIN.PLAN_CODE = mPLAN_MAIN.PLAN_CODE; mRECORD_MAIN.PLAN_TYPE_CODE = mPLAN_MAIN.PLAN_TYPE_CODE; } mRECORD_MAIN.MANAGE_TYPE_CODE = mMANAGE_MAIN.MANAGE_TYPE_CODE; mRECORD_MAIN.STOCK_BARCODE = mMANAGE_MAIN.STOCK_BARCODE; if (mSTART_WH_CELL != null) mRECORD_MAIN.START_POSITION = mSTART_WH_CELL.CELL_CODE; if (mEND_WH_CELL != null) mRECORD_MAIN.END_POSITION = mEND_WH_CELL.CELL_CODE; mRECORD_MAIN.RECORD_OPERATOR = mMANAGE_MAIN.MANAGE_OPERATOR; mRECORD_MAIN.MANAGE_BEGIN_TIME = mMANAGE_MAIN.MANAGE_BEGIN_TIME; mRECORD_MAIN.MANAGE_END_TIME = mMANAGE_MAIN.MANAGE_END_TIME; mRECORD_MAIN.RECORD_REMARK = mMANAGE_MAIN.MANAGE_REMARK; mRECORD_MAIN.MANAGE_STATUS = sManageStatus; this._P_RECORD_MAIN.Add(mRECORD_MAIN); foreach (SiaSun.LMS.Model.MANAGE_LIST mMANAGE_LIST in this._P_MANAGE_LIST.GetListManageID(MANAGE_ID)) { mRECORD_LIST = new Model.RECORD_LIST(); mRECORD_LIST.RECORD_ID = mRECORD_MAIN.RECORD_ID; mRECORD_LIST.PLAN_LIST_ID = mMANAGE_LIST.PLAN_LIST_ID; mRECORD_LIST.RECORD_LIST_QUANTITY = mMANAGE_LIST.MANAGE_LIST_QUANTITY; mRECORD_LIST.GOODS_ID = mMANAGE_LIST.GOODS_ID; mRECORD_LIST.RECORD_LIST_REMARK = mMANAGE_LIST.MANAGE_LIST_REMARK; bResult = this._S_GoodsService.GoodsPropertySetValue(mMANAGE_LIST.GOODS_ID, mRECORD_LIST, mMANAGE_LIST, out sResult); if (!bResult) { return bResult; } mRECORD_LIST.BOX_BARCODE = mMANAGE_LIST.BOX_BARCODE; mRECORD_LIST.GOODS_PROPERTY1 = mMANAGE_LIST.GOODS_PROPERTY1; mRECORD_LIST.GOODS_PROPERTY2 = mMANAGE_LIST.GOODS_PROPERTY2; mRECORD_LIST.GOODS_PROPERTY3 = mMANAGE_LIST.GOODS_PROPERTY3; mRECORD_LIST.GOODS_PROPERTY4 = mMANAGE_LIST.GOODS_PROPERTY4; mRECORD_LIST.GOODS_PROPERTY5 = mMANAGE_LIST.GOODS_PROPERTY5; mRECORD_LIST.GOODS_PROPERTY6 = mMANAGE_LIST.GOODS_PROPERTY6; mRECORD_LIST.GOODS_PROPERTY7 = mMANAGE_LIST.GOODS_PROPERTY7; mRECORD_LIST.GOODS_PROPERTY8 = mMANAGE_LIST.GOODS_PROPERTY8; mRECORD_LIST.GOODS_PROPERTY9 = mMANAGE_LIST.GOODS_PROPERTY9; this._P_RECORD_LIST.Add(mRECORD_LIST); //是否为空 是否有明细 if (mPLAN_MAIN != null) { mPLAN_LIST = this._P_PLAN_LIST.GetModel(mMANAGE_LIST.PLAN_LIST_ID); if (mPLAN_LIST != null) { mPLAN_LIST.PLAN_LIST_FINISHED_QUANTITY += mMANAGE_LIST.MANAGE_LIST_QUANTITY; this._P_PLAN_LIST.Update(mPLAN_LIST); } #region//判断计划是否可以完成 DataTable update_plan = this.GetList(string.Format(@"select * from plan_list where plan_id = {0}", mPLAN_MAIN.PLAN_ID)); int j = 0; for (int i = 0; i < update_plan.Rows.Count; i++) { if (Convert.ToInt32(update_plan.Rows[i]["PLAN_LIST_FINISHED_QUANTITY"]) >= Convert.ToInt32(update_plan.Rows[i]["PLAN_LIST_QUANTITY"])) { j++; } } if (j == update_plan.Rows.Count) { mPLAN_MAIN.PLAN_STATUS = "Complete"; mPLAN_MAIN.PLAN_END_TIME = SiaSun.LMS.Common.StringUtil.GetDateTime(); this._P_PLAN_MAIN.Update(mPLAN_MAIN); } #endregion } IList lsMANAGE_DETAIL = this._P_MANAGE_DETAIL.GetListManageListID(mMANAGE_LIST.MANAGE_LIST_ID); foreach (SiaSun.LMS.Model.MANAGE_DETAIL mMANAGE_DETAIL in lsMANAGE_DETAIL) { mRECORD_DETAIL = new Model.RECORD_DETAIL(); mRECORD_DETAIL.RECORD_LIST_ID = mRECORD_LIST.RECORD_LIST_ID; mRECORD_DETAIL.BOX_BARCODE = mMANAGE_DETAIL.BOX_BARCODE; mRECORD_DETAIL.GOODS_BARCODE = mMANAGE_DETAIL.GOODS_BARCODE; mRECORD_DETAIL.RECORD_DETAIL_REMARK = mMANAGE_DETAIL.MANAGE_DETAIL_REMARK; this._P_RECORD_DETAIL.Add(mRECORD_DETAIL); } } this._P_IO_CONTROL.DeleteManageID(MANAGE_ID); this._P_MANAGE_DETAIL.DeleteManageID(MANAGE_ID); this._P_MANAGE_LIST.DeleteManageID(MANAGE_ID); this._P_MANAGE_MAIN.Delete(MANAGE_ID); } catch (Exception ex) { bResult = false; sResult = ex.Message; } return bResult; } /// 根据出库起始货位创建任务列表 /// /// /// /// /// /// public bool MANAGE_LIST_CREATE(int START_CELL_ID, out List listMANAGE_LIST, out string sResult) { bool bResult = true; sResult = string.Empty; listMANAGE_LIST = new List(); try { this._P_Base_House.BeginTransaction(); //获取库存主表 Model.STORAGE_MAIN mSTORAGE_MAIN = this._P_STORAGE_MAIN.GetModelCellID(START_CELL_ID); if (mSTORAGE_MAIN == null) { bResult = false; sResult = string.Format("未找到货位【{0}】的库存主表!", START_CELL_ID); return bResult; } //获取库存列表 List listSTORAGE_LIST = this._P_STORAGE_LIST.GetListStorageID(mSTORAGE_MAIN.STORAGE_ID).ToList(); if (listSTORAGE_LIST == null || listSTORAGE_LIST.Count == 0) { bResult = false; sResult = string.Format("未找到库存主表【{0}】的库存列表!", mSTORAGE_MAIN.STORAGE_ID); return bResult; } //创建任务列表 foreach (Model.STORAGE_LIST mSTORAGE_LIST in listSTORAGE_LIST) { Model.MANAGE_LIST mMANAGE_LIST = new MANAGE_LIST(); mMANAGE_LIST.STORAGE_LIST_ID = mSTORAGE_LIST.STORAGE_LIST_ID; mMANAGE_LIST.GOODS_ID = mSTORAGE_LIST.GOODS_ID; mMANAGE_LIST.MANAGE_LIST_QUANTITY = mSTORAGE_LIST.STORAGE_LIST_QUANTITY; mMANAGE_LIST.MANAGE_LIST_REMARK = mSTORAGE_LIST.STORAGE_LIST_REMARK; mMANAGE_LIST.BOX_BARCODE = mSTORAGE_LIST.BOX_BARCODE; mMANAGE_LIST.GOODS_PROPERTY1 = mSTORAGE_LIST.GOODS_PROPERTY1; mMANAGE_LIST.GOODS_PROPERTY2 = mSTORAGE_LIST.GOODS_PROPERTY2; mMANAGE_LIST.GOODS_PROPERTY3 = mSTORAGE_LIST.GOODS_PROPERTY3; mMANAGE_LIST.GOODS_PROPERTY4 = mSTORAGE_LIST.GOODS_PROPERTY4; mMANAGE_LIST.GOODS_PROPERTY5 = mSTORAGE_LIST.GOODS_PROPERTY5; mMANAGE_LIST.GOODS_PROPERTY6 = mSTORAGE_LIST.GOODS_PROPERTY6; mMANAGE_LIST.GOODS_PROPERTY7 = mSTORAGE_LIST.GOODS_PROPERTY7; mMANAGE_LIST.GOODS_PROPERTY8 = mSTORAGE_LIST.GOODS_PROPERTY8; mMANAGE_LIST.GOODS_PROPERTY9 = mSTORAGE_LIST.GOODS_PROPERTY9; //mMANAGE_LIST.GOODS_PROPERTY10 = mSTORAGE_LIST.GOODS_PROPERTY10; //mMANAGE_LIST.GOODS_PROPERTY11 = mSTORAGE_LIST.GOODS_PROPERTY11; //mMANAGE_LIST.GOODS_PROPERTY12 = mSTORAGE_LIST.GOODS_PROPERTY12; //mMANAGE_LIST.GOODS_PROPERTY13 = mSTORAGE_LIST.GOODS_PROPERTY13; //mMANAGE_LIST.GOODS_PROPERTY14 = mSTORAGE_LIST.GOODS_PROPERTY14; //mMANAGE_LIST.GOODS_PROPERTY15 = mSTORAGE_LIST.GOODS_PROPERTY15; listMANAGE_LIST.Add(mMANAGE_LIST); } } catch (Exception ex) { bResult = false; sResult = ex.Message; } finally { if (bResult) { this._P_Base_House.CommitTransaction(); } else { this._P_Base_House.RollBackTransaction(); } } return bResult; } #region 安卓pda //配盘 public bool ManageInAndroid(out string sResult, MANAGE_MAIN mm, MANAGE_LIST[] lManageList) { bool bResult = true; sResult = string.Empty; bResult = new ManageIn().ManageCreate(mm, lManageList.ToList(), true, true, true, false, out sResult); return bResult; } //解绑 public bool ManageOutAndroid(out string sResult, MANAGE_MAIN mm, MANAGE_LIST[] lManageList) { bool bResult = true; sResult = string.Empty; bResult = new ManageOut().ManageCreateWorkingArea(mm, lManageList.ToList(), true, false, true, out sResult); return bResult; } //上架 public bool ManageUpAndroid(out string sResult, MANAGE_MAIN mm, MANAGE_LIST[] lManageList) { bool bResult = true; sResult = string.Empty; bResult = new ManageUp().ManageCreate(mm, true, true, false, out sResult); return bResult; } //呼叫子托盘 public bool CallManageOutAndroid(int EndId, string GoodsCode, string User, out string sResult) { bool bResult = true; sResult = string.Empty; Model.WH_CELL wH_CELL = this._P_WH_CELL.GetModel(EndId); Model.SYS_USER sYS_USER = new SYS_USER(); sYS_USER.USER_NAME = "Pad" + User; sYS_USER.USER_CODE = "Pad" + User; DataTable dtManageZTP = this.GetList(string.Format("select stock_barcode from IO_CONTROL where end_device_code='{0}'", wH_CELL.CELL_CODE)); if (dtManageZTP.Rows.Count > 0) { bResult = false; sResult = string.Format("呼叫空子托盘垛出库失败:已经存在到站台{0}的任务", wH_CELL.CELL_CODE) + sResult; AddLog(sResult); return bResult; } bResult = this.Invoke("ManageOut", "ManageCreate_Stock_Out_Auot", new object[] { sYS_USER, "ManageOut", GoodsCode, wH_CELL.CELL_CODE, true }, out sResult); if (bResult) { sResult = string.Format("呼叫空子托盘垛出库成功:站台{0}", wH_CELL.CELL_CODE) + sResult; AddLog(sResult); } else { bResult = false; } return bResult; } //立库出库 public bool LiKuOutAndroid(out string sResult, MANAGE_MAIN mm, MANAGE_LIST[] lManageList) { bool bResult = true; sResult = string.Empty; bResult = new ManageOut().ManageCreate(mm, lManageList.ToList(), true, true, false, out sResult); if (bResult) { sResult = string.Format("出库成功") + sResult; AddLog(sResult); } else { bResult = false; } return bResult; } public bool ManageOutAuto(int plan_id, bool bTrans, bool bAutoSendControl, bool bComplete,out string sResult) { sResult = string.Empty; bool bResult = true; lock (lockObj) { this._P_Base_House.BeginTransaction(bTrans); try { PLAN_MAIN pLAN_MAIN = this._P_PLAN_MAIN.GetModel(plan_id); if (pLAN_MAIN == null) { sResult = string.Format(@"未找到计划id{0}的主表", plan_id); bResult = false; return bResult; } IList iO_CONTROLs = this._P_IO_CONTROL.GetModel_BY_END_DEVICE_CODE(pLAN_MAIN.PLAN_TO_DEPT); if (iO_CONTROLs.Count > 1) { sResult = string.Format(@"计划id{0}状态不是执行中", plan_id); bResult = false; return bResult; } if (!pLAN_MAIN.PLAN_STATUS.Equals("Executing")) { sResult = string.Format(@"计划id{0}状态不是执行中", plan_id); bResult = false; return bResult; } List pLAN_LISTs = (List)_P_PLAN_LIST.GetListPlanID(pLAN_MAIN.PLAN_ID); if (pLAN_LISTs == null || pLAN_LISTs.Count < 1) { sResult = string.Format(@"未找到计划id{0}的子表", plan_id); bResult = false; return bResult; } //需要判断目标站台是否有货,如果有货且有一个任务,不出库 //GOODS_PROPERTY1:批次 string strGoods_property = string.Empty; //筛选条件 strGoods_property = string.Format(@" goods_id = {0} and {1} ", pLAN_LISTs[0].GOODS_ID,string.IsNullOrEmpty(pLAN_LISTs[0].GOODS_PROPERTY1)? " 1=1 " : string.Format(@"goods_property1 = '{0}'", pLAN_LISTs[0].GOODS_PROPERTY1)); //如果出库小料,单伸货位 if (pLAN_LISTs[0].GOODS_ID == 32782) { DataTable dt_storage_list = this.GetList(string.Format(@"select * from v_storage_list where {0} and CELL_STATUS='Full' and RUN_STATUS='Enable' and device_code in(select start_device from io_control_route where end_device = '{1}' and control_route_status = 1) order by entry_time", strGoods_property, pLAN_MAIN.PLAN_TO_DEPT)); if (dt_storage_list == null || dt_storage_list.Rows.Count < 1) { sResult = "无库存"; bResult = false; return bResult; } //下达任务 Model.WH_CELL wH_CELL = this._P_WH_CELL.GetModel(pLAN_MAIN.PLAN_TO_DEPT); Model.MANAGE_MAIN mANAGE_MAIN = new Model.MANAGE_MAIN(); Model.STORAGE_MAIN sTORAGE_MAIN = _P_STORAGE_MAIN.GetModelStockBarcode(dt_storage_list.Rows[0]["STOCK_BARCODE"].ToString()); IList sTORAGE_LISTs = _P_STORAGE_LIST.GetListStorageID(sTORAGE_MAIN.STORAGE_ID); List mANAGE_LISTs = new List(); mANAGE_MAIN.STOCK_BARCODE = sTORAGE_MAIN.STOCK_BARCODE; mANAGE_MAIN.START_CELL_ID = sTORAGE_MAIN.CELL_ID; mANAGE_MAIN.END_CELL_ID = wH_CELL.CELL_ID; mANAGE_MAIN.MANAGE_TYPE_CODE = "ManagePlanOut"; mANAGE_MAIN.PLAN_ID = plan_id; mANAGE_MAIN.MANAGE_OPERATOR = pLAN_MAIN.PLAN_CREATER; mANAGE_MAIN.MANAGE_BEGIN_TIME = SiaSun.LMS.Common.StringUtil.GetDateTime(); mANAGE_MAIN.MANAGE_STATUS = SiaSun.LMS.Enum.MANAGE_STATUS.WaitingSend.ToString(); foreach (Model.STORAGE_LIST storage_list in sTORAGE_LISTs) { Model.MANAGE_LIST mANAGE_LIST = new Model.MANAGE_LIST(); mANAGE_LIST.GOODS_ID = storage_list.GOODS_ID; mANAGE_LIST.MANAGE_LIST_QUANTITY = 1; mANAGE_LIST.STORAGE_LIST_ID = storage_list.STORAGE_LIST_ID; mANAGE_LIST.PLAN_LIST_ID = pLAN_LISTs[0].PLAN_LIST_ID; mANAGE_LIST.GOODS_PROPERTY1 = storage_list.GOODS_PROPERTY1; mANAGE_LIST.GOODS_PROPERTY2 = storage_list.GOODS_PROPERTY2; mANAGE_LIST.GOODS_PROPERTY3 = storage_list.GOODS_PROPERTY3; mANAGE_LIST.GOODS_PROPERTY4 = storage_list.GOODS_PROPERTY4; mANAGE_LIST.GOODS_PROPERTY5 = storage_list.GOODS_PROPERTY5; mANAGE_LIST.GOODS_PROPERTY6 = storage_list.GOODS_PROPERTY6; mANAGE_LIST.GOODS_PROPERTY7 = storage_list.GOODS_PROPERTY7; mANAGE_LIST.GOODS_PROPERTY8 = storage_list.GOODS_PROPERTY8; mANAGE_LIST.GOODS_PROPERTY9 = storage_list.GOODS_PROPERTY9; mANAGE_LISTs.Add(mANAGE_LIST); } bResult = new ManageOut().ManageCreate(mANAGE_MAIN, pLAN_LISTs, mANAGE_LISTs, false, bAutoSendControl, bComplete, out sResult); return bResult; } //出库原料,双伸货位 else { #region 先找远端有货无任务且近端有货有任务的远端货位 DataTable DT_STORAGE_FAR_FULL_ENABLE = this.GetList(string.Format(@"select * from V_STORAGE_LIST where cell_id in( SELECT CELL_ID_FAR FROM V_WH_CELL_DOUBLE_TO_NORMAL where CELL_STATUS='Full' and RUN_STATUS='Enable' and CELL_STATUS_NEAR = 'Full' and RUN_STATUS_NEAR = 'Selected') and {0} and device_code in(select start_device from io_control_route where end_device = '{1}' and control_route_status = 1)", strGoods_property, pLAN_MAIN.PLAN_TO_DEPT)); if (DT_STORAGE_FAR_FULL_ENABLE == null || DT_STORAGE_FAR_FULL_ENABLE.Rows.Count < 1) { #region 再找远端有货无任务且近端无货无任务的远端货位 DataTable DT_STORAGE_FAR_FULL_ENABLE_NEAR_NOHAVE_ENABLE = this.GetList(string.Format(@"select * from V_STORAGE_LIST where cell_id in( SELECT CELL_ID_FAR FROM V_WH_CELL_DOUBLE_TO_NORMAL where CELL_STATUS_NEAR='Nohave' and RUN_STATUS_NEAR='Enable' and CELL_STATUS = 'Full' and RUN_STATUS = 'Enable') and {0} and device_code in(select start_device from io_control_route where end_device = '{1}' and control_route_status = 1)", strGoods_property, pLAN_MAIN.PLAN_TO_DEPT)); if (DT_STORAGE_FAR_FULL_ENABLE_NEAR_NOHAVE_ENABLE == null || DT_STORAGE_FAR_FULL_ENABLE_NEAR_NOHAVE_ENABLE.Rows.Count < 1) { #region 再其次找近端有货无任务的近端货位 DataTable DT_STORAGE_NEAR_FULL_ENABLE = this.GetList(string.Format(@"select * from V_STORAGE_LIST where cell_id in( SELECT CELL_ID_NEAR FROM V_WH_CELL_DOUBLE_TO_NORMAL where CELL_STATUS_NEAR='Full' and RUN_STATUS_NEAR='Enable') and {0} and device_code in(select start_device from io_control_route where end_device = '{1}' and control_route_status = 1)", strGoods_property, pLAN_MAIN.PLAN_TO_DEPT)); if (DT_STORAGE_NEAR_FULL_ENABLE == null || DT_STORAGE_NEAR_FULL_ENABLE.Rows.Count < 1) { //最后找远端货位有货无任务的远端货位 DataTable DT_STORAGE_FAR_FULL_ENABLE_NEAR_ANY = this.GetList(string.Format(@"select * from V_STORAGE_LIST where cell_id in( SELECT CELL_ID_FAR FROM V_WH_CELL_DOUBLE_TO_NORMAL where CELL_STATUS = 'Full' and RUN_STATUS = 'Enable') and {0} and device_code in(select start_device from io_control_route where end_device = '{1}' and control_route_status = 1)", strGoods_property, pLAN_MAIN.PLAN_TO_DEPT)); if (DT_STORAGE_FAR_FULL_ENABLE_NEAR_ANY == null || DT_STORAGE_FAR_FULL_ENABLE_NEAR_ANY.Rows.Count < 1) { sResult = string.Format(@"无库存"); bResult = false; return bResult; } else { //下达任务 Model.WH_CELL wH_CELL = this._P_WH_CELL.GetModel(pLAN_MAIN.PLAN_TO_DEPT); Model.MANAGE_MAIN mANAGE_MAIN = new Model.MANAGE_MAIN(); Model.STORAGE_MAIN sTORAGE_MAIN = _P_STORAGE_MAIN.GetModelStockBarcode(DT_STORAGE_FAR_FULL_ENABLE_NEAR_ANY.Rows[0]["STOCK_BARCODE"].ToString()); IList sTORAGE_LISTs = _P_STORAGE_LIST.GetListStorageID(sTORAGE_MAIN.STORAGE_ID); List mANAGE_LISTs = new List(); mANAGE_MAIN.STOCK_BARCODE = sTORAGE_MAIN.STOCK_BARCODE; mANAGE_MAIN.START_CELL_ID = sTORAGE_MAIN.CELL_ID; mANAGE_MAIN.END_CELL_ID = wH_CELL.CELL_ID; mANAGE_MAIN.MANAGE_TYPE_CODE = "ManagePlanOut"; mANAGE_MAIN.PLAN_ID = plan_id; mANAGE_MAIN.MANAGE_OPERATOR = pLAN_MAIN.PLAN_CREATER; mANAGE_MAIN.MANAGE_BEGIN_TIME = SiaSun.LMS.Common.StringUtil.GetDateTime(); mANAGE_MAIN.MANAGE_STATUS = SiaSun.LMS.Enum.MANAGE_STATUS.WaitingSend.ToString(); foreach (Model.STORAGE_LIST storage_list in sTORAGE_LISTs) { Model.MANAGE_LIST mANAGE_LIST = new Model.MANAGE_LIST(); mANAGE_LIST.GOODS_ID = storage_list.GOODS_ID; mANAGE_LIST.MANAGE_LIST_QUANTITY = 1; mANAGE_LIST.STORAGE_LIST_ID = storage_list.STORAGE_LIST_ID; mANAGE_LIST.PLAN_LIST_ID = pLAN_LISTs[0].PLAN_LIST_ID; mANAGE_LIST.GOODS_PROPERTY1 = storage_list.GOODS_PROPERTY1; mANAGE_LIST.GOODS_PROPERTY2 = storage_list.GOODS_PROPERTY2; mANAGE_LIST.GOODS_PROPERTY3 = storage_list.GOODS_PROPERTY3; mANAGE_LIST.GOODS_PROPERTY4 = storage_list.GOODS_PROPERTY4; mANAGE_LIST.GOODS_PROPERTY5 = storage_list.GOODS_PROPERTY5; mANAGE_LIST.GOODS_PROPERTY6 = storage_list.GOODS_PROPERTY6; mANAGE_LIST.GOODS_PROPERTY7 = storage_list.GOODS_PROPERTY7; mANAGE_LIST.GOODS_PROPERTY8 = storage_list.GOODS_PROPERTY8; mANAGE_LIST.GOODS_PROPERTY9 = storage_list.GOODS_PROPERTY9; mANAGE_LISTs.Add(mANAGE_LIST); } bResult = new ManageOut().ManageCreate(mANAGE_MAIN, pLAN_LISTs, mANAGE_LISTs, false, bAutoSendControl, bComplete, out sResult); return bResult; } } else { //下达任务 Model.WH_CELL wH_CELL = this._P_WH_CELL.GetModel(pLAN_MAIN.PLAN_TO_DEPT); Model.MANAGE_MAIN mANAGE_MAIN = new Model.MANAGE_MAIN(); Model.STORAGE_MAIN sTORAGE_MAIN = _P_STORAGE_MAIN.GetModelStockBarcode(DT_STORAGE_NEAR_FULL_ENABLE.Rows[0]["STOCK_BARCODE"].ToString()); IList sTORAGE_LISTs = _P_STORAGE_LIST.GetListStorageID(sTORAGE_MAIN.STORAGE_ID); List mANAGE_LISTs = new List(); mANAGE_MAIN.STOCK_BARCODE = sTORAGE_MAIN.STOCK_BARCODE; mANAGE_MAIN.START_CELL_ID = sTORAGE_MAIN.CELL_ID; mANAGE_MAIN.END_CELL_ID = wH_CELL.CELL_ID; mANAGE_MAIN.MANAGE_TYPE_CODE = "ManagePlanOut"; mANAGE_MAIN.PLAN_ID = plan_id; mANAGE_MAIN.MANAGE_OPERATOR = pLAN_MAIN.PLAN_CREATER; mANAGE_MAIN.MANAGE_BEGIN_TIME = SiaSun.LMS.Common.StringUtil.GetDateTime(); mANAGE_MAIN.MANAGE_STATUS = SiaSun.LMS.Enum.MANAGE_STATUS.WaitingSend.ToString(); foreach (Model.STORAGE_LIST storage_list in sTORAGE_LISTs) { Model.MANAGE_LIST mANAGE_LIST = new Model.MANAGE_LIST(); mANAGE_LIST.GOODS_ID = storage_list.GOODS_ID; mANAGE_LIST.MANAGE_LIST_QUANTITY = 1; mANAGE_LIST.PLAN_LIST_ID = pLAN_LISTs[0].PLAN_LIST_ID; mANAGE_LIST.STORAGE_LIST_ID = storage_list.STORAGE_LIST_ID; mANAGE_LIST.GOODS_PROPERTY1 = storage_list.GOODS_PROPERTY1; mANAGE_LIST.GOODS_PROPERTY2 = storage_list.GOODS_PROPERTY2; mANAGE_LIST.GOODS_PROPERTY3 = storage_list.GOODS_PROPERTY3; mANAGE_LIST.GOODS_PROPERTY4 = storage_list.GOODS_PROPERTY4; mANAGE_LIST.GOODS_PROPERTY5 = storage_list.GOODS_PROPERTY5; mANAGE_LIST.GOODS_PROPERTY6 = storage_list.GOODS_PROPERTY6; mANAGE_LIST.GOODS_PROPERTY7 = storage_list.GOODS_PROPERTY7; mANAGE_LIST.GOODS_PROPERTY8 = storage_list.GOODS_PROPERTY8; mANAGE_LIST.GOODS_PROPERTY9 = storage_list.GOODS_PROPERTY9; mANAGE_LISTs.Add(mANAGE_LIST); } bResult = new ManageOut().ManageCreate(mANAGE_MAIN, pLAN_LISTs, mANAGE_LISTs, false, bAutoSendControl, bComplete, out sResult); return bResult; } #endregion } else { //下达任务 Model.WH_CELL wH_CELL = this._P_WH_CELL.GetModel(pLAN_MAIN.PLAN_TO_DEPT); Model.MANAGE_MAIN mANAGE_MAIN = new Model.MANAGE_MAIN(); Model.STORAGE_MAIN sTORAGE_MAIN = _P_STORAGE_MAIN.GetModelStockBarcode(DT_STORAGE_FAR_FULL_ENABLE_NEAR_NOHAVE_ENABLE.Rows[0]["STOCK_BARCODE"].ToString()); IList sTORAGE_LISTs = _P_STORAGE_LIST.GetListStorageID(sTORAGE_MAIN.STORAGE_ID); List mANAGE_LISTs = new List(); mANAGE_MAIN.STOCK_BARCODE = sTORAGE_MAIN.STOCK_BARCODE; mANAGE_MAIN.START_CELL_ID = sTORAGE_MAIN.CELL_ID; mANAGE_MAIN.END_CELL_ID = wH_CELL.CELL_ID; mANAGE_MAIN.MANAGE_TYPE_CODE = "ManagePlanOut"; mANAGE_MAIN.PLAN_ID = plan_id; mANAGE_MAIN.MANAGE_OPERATOR = pLAN_MAIN.PLAN_CREATER; mANAGE_MAIN.MANAGE_BEGIN_TIME = SiaSun.LMS.Common.StringUtil.GetDateTime(); mANAGE_MAIN.MANAGE_STATUS = SiaSun.LMS.Enum.MANAGE_STATUS.WaitingSend.ToString(); foreach (Model.STORAGE_LIST storage_list in sTORAGE_LISTs) { Model.MANAGE_LIST mANAGE_LIST = new Model.MANAGE_LIST(); mANAGE_LIST.GOODS_ID = storage_list.GOODS_ID; mANAGE_LIST.MANAGE_LIST_QUANTITY = 1; mANAGE_LIST.STORAGE_LIST_ID = storage_list.STORAGE_LIST_ID; mANAGE_LIST.PLAN_LIST_ID = pLAN_LISTs[0].PLAN_LIST_ID; mANAGE_LIST.GOODS_PROPERTY1 = storage_list.GOODS_PROPERTY1; mANAGE_LIST.GOODS_PROPERTY2 = storage_list.GOODS_PROPERTY2; mANAGE_LIST.GOODS_PROPERTY3 = storage_list.GOODS_PROPERTY3; mANAGE_LIST.GOODS_PROPERTY4 = storage_list.GOODS_PROPERTY4; mANAGE_LIST.GOODS_PROPERTY5 = storage_list.GOODS_PROPERTY5; mANAGE_LIST.GOODS_PROPERTY6 = storage_list.GOODS_PROPERTY6; mANAGE_LIST.GOODS_PROPERTY7 = storage_list.GOODS_PROPERTY7; mANAGE_LIST.GOODS_PROPERTY8 = storage_list.GOODS_PROPERTY8; mANAGE_LIST.GOODS_PROPERTY9 = storage_list.GOODS_PROPERTY9; mANAGE_LISTs.Add(mANAGE_LIST); } bResult = new ManageOut().ManageCreate(mANAGE_MAIN, pLAN_LISTs, mANAGE_LISTs, false, bAutoSendControl, bComplete, out sResult); return bResult; } #endregion } else { //下达任务 Model.WH_CELL wH_CELL = this._P_WH_CELL.GetModel(pLAN_MAIN.PLAN_TO_DEPT); Model.MANAGE_MAIN mANAGE_MAIN = new Model.MANAGE_MAIN(); Model.STORAGE_MAIN sTORAGE_MAIN = _P_STORAGE_MAIN.GetModelStockBarcode(DT_STORAGE_FAR_FULL_ENABLE.Rows[0]["STOCK_BARCODE"].ToString()); IList sTORAGE_LISTs = _P_STORAGE_LIST.GetListStorageID(sTORAGE_MAIN.STORAGE_ID); List mANAGE_LISTs = new List(); mANAGE_MAIN.STOCK_BARCODE = sTORAGE_MAIN.STOCK_BARCODE; mANAGE_MAIN.START_CELL_ID = sTORAGE_MAIN.CELL_ID; mANAGE_MAIN.END_CELL_ID = wH_CELL.CELL_ID; mANAGE_MAIN.MANAGE_TYPE_CODE = "ManagePlanOut"; mANAGE_MAIN.PLAN_ID = plan_id; mANAGE_MAIN.MANAGE_OPERATOR = pLAN_MAIN.PLAN_CREATER; mANAGE_MAIN.MANAGE_BEGIN_TIME = SiaSun.LMS.Common.StringUtil.GetDateTime(); mANAGE_MAIN.MANAGE_STATUS = SiaSun.LMS.Enum.MANAGE_STATUS.WaitingSend.ToString(); foreach (Model.STORAGE_LIST storage_list in sTORAGE_LISTs) { Model.MANAGE_LIST mANAGE_LIST = new Model.MANAGE_LIST(); mANAGE_LIST.GOODS_ID = storage_list.GOODS_ID; mANAGE_LIST.MANAGE_LIST_QUANTITY = 1; mANAGE_LIST.PLAN_LIST_ID = pLAN_LISTs[0].PLAN_LIST_ID; mANAGE_LIST.GOODS_PROPERTY1 = storage_list.GOODS_PROPERTY1; mANAGE_LIST.GOODS_PROPERTY2 = storage_list.GOODS_PROPERTY2; mANAGE_LIST.GOODS_PROPERTY3 = storage_list.GOODS_PROPERTY3; mANAGE_LIST.GOODS_PROPERTY4 = storage_list.GOODS_PROPERTY4; mANAGE_LIST.GOODS_PROPERTY5 = storage_list.GOODS_PROPERTY5; mANAGE_LIST.GOODS_PROPERTY6 = storage_list.GOODS_PROPERTY6; mANAGE_LIST.GOODS_PROPERTY7 = storage_list.GOODS_PROPERTY7; mANAGE_LIST.GOODS_PROPERTY8 = storage_list.GOODS_PROPERTY8; mANAGE_LIST.GOODS_PROPERTY9 = storage_list.GOODS_PROPERTY9; mANAGE_LISTs.Add(mANAGE_LIST); } bResult = new ManageOut().ManageCreate(mANAGE_MAIN, pLAN_LISTs, mANAGE_LISTs, false, bAutoSendControl, bComplete, out sResult); return bResult; } #endregion } } catch (Exception ex) { sResult = ex.ToString(); bResult = false; return bResult; } finally { if (bResult) { this._P_Base_House.CommitTransaction(bTrans); } else { this._P_Base_House.RollBackTransaction(bTrans); } } } } public string GetGoodsProperty05(string sDeviceCode) { DataTable dtApply = this.GetList( $"select top 1 isnull(CONTROL_APPLY_PARA03,'0') CONTROL_APPLY_PARA03 from IO_CONTROL_APPLY_HIS" + $" where DEVICE_CODE='{sDeviceCode}'" + $" and CREATE_TIME>'{DateTime.Now.AddHours(-1).ToString("yyyy-MM-dd HH:mm:ss")}' order by CONTROL_APPLY_ID desc"); if (dtApply.Rows.Count > 0) { return dtApply.Rows[0]["CONTROL_APPLY_PARA03"].ToString().TrimStart('-'); } return string.Empty; } #endregion } }