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 { 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 = true;//= 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, 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; 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; this._P_RECORD_LIST.Add(mRECORD_LIST); //是否为空 是否有明细 SiaSun.LMS.Model.PLAN_LIST nPLAN_LIST = new PLAN_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 if (mPLAN_MAIN.PLAN_TYPE_CODE == "PlanIn") { nPLAN_LIST.GOODS_PROPERTY3 = mEND_WH_CELL.CELL_CODE;//货位编码 } else { nPLAN_LIST.GOODS_PROPERTY3 = mSTART_WH_CELL.CELL_CODE; } nPLAN_LIST.GOODS_PROPERTY1 = mPLAN_MAIN.PLAN_FROM_DEPT;//货物编码 nPLAN_LIST.GOODS_PROPERTY2 = Convert.ToString(mMANAGE_LIST.MANAGE_LIST_QUANTITY); nPLAN_LIST.GOODS_PROPERTY3 = mEND_WH_CELL.CELL_CODE;//货位编码 nPLAN_LIST.GOODS_PROPERTY4 = "1";//标志位 nPLAN_LIST.GOODS_PROPERTY5 = mPLAN_MAIN.PLAN_CODE;//计划单号 nPLAN_LIST.GOODS_PROPERTY6 = string.Empty; this._P_PLAN_LIST.Add(nPLAN_LIST); } 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 ManageInAndroid(MANAGE_MAIN mm, List lManageList, out string sResult) { return this.Invoke("ManageIn", "ManageCreate", new object[] { mm, lManageList, true, true, true, false }, out sResult); ; } public bool ManageOutAndroid(MANAGE_MAIN mm, List lManageList, out string sResult) { return this.Invoke("ManageOut", "ManageCreate", new object[] { mm, lManageList, true, true, true }, out sResult); ; } } }