using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Reflection;
using SiaSun.LMS.Model;


namespace SiaSun.LMS.Implement
{
    public class ManageBase : S_BaseService, SiaSun.LMS.Interface.I_ManageService
    {
        #region MANAGE

        /// <summary>管理-下达
        /// 管理-下达
        /// </summary>
        /// <param name="mMANAGE_MAIN">管理任务模式对象</param>
        /// <param name="lsMANAGE_LIST">管理任务明细模式对象链表</param>
        /// <param name="DOWNLOAD_TASK">是否下达调度任务</param>
        /// <param name="bTrans">是否使用事务</param>
        /// <param name="bComplete">是否报完成</param>
        /// <returns></returns>
        public bool ManageCreate(SiaSun.LMS.Model.MANAGE_MAIN mMANAGE_MAIN,
                                            List<SiaSun.LMS.Model.MANAGE_LIST> lsMANAGE_LIST,
                                            bool bAutoSendControl,
                                            bool bTrans,out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            try
            {
                this._P_Base_House.BeginTransaction(bTrans);

                #region 校验

                SiaSun.LMS.Model.MANAGE_TYPE mMANAGE_TYPE = this._P_MANAGE_TYPE.GetModelManageTypeCode(mMANAGE_MAIN.MANAGE_TYPE_CODE);

                if (mMANAGE_TYPE == null)
                {
                    bResult = false;

                    sResult = string.Format("未找到任务类型{0}", mMANAGE_MAIN.MANAGE_TYPE_CODE);

                    return bResult;
                }

                if (!string.IsNullOrEmpty(mMANAGE_MAIN.STOCK_BARCODE))
                {
                    SiaSun.LMS.Model.MANAGE_MAIN mMANAGE_MAIN_OLD = this._P_MANAGE_MAIN.GetModelStockBarcodeManageStatus(mMANAGE_MAIN.STOCK_BARCODE);
                    if (null != mMANAGE_MAIN_OLD)
                    {
                        bResult = false;

                        sResult = string.Format("托盘条码{0}已经存在任务", mMANAGE_MAIN.STOCK_BARCODE);

                        return bResult;
                    }
                }

                //SiaSun.LMS.Model.WH_CELL mSTART_WH_CELL = this._P_WH_CELL.GetModel(mMANAGE_MAIN.START_CELL_ID);
                //if (null == mSTART_WH_CELL)
                //{
                //    bResult = false;

                //    sResult = string.Format("起始位置索引[{0}]不存在", mMANAGE_MAIN.START_CELL_ID);

                //    return bResult;
                //}

                //SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(mMANAGE_MAIN.END_CELL_ID);
                //if (null == mEND_WH_CELL)
                //{
                //    bResult = false;

                //    sResult = string.Format(" 终止位置索引[{0}]不存在", mMANAGE_MAIN.END_CELL_ID);

                //    return bResult;
                //}

                #endregion

                #region 生成任务

                mMANAGE_MAIN.MANAGE_BEGIN_TIME = SiaSun.LMS.Common.StringUtil.GetCurDateTimeString();

                this._P_MANAGE_MAIN.Add(mMANAGE_MAIN);

                foreach (SiaSun.LMS.Model.MANAGE_LIST mMANAGE_LIST  in lsMANAGE_LIST)
                {
                    //若关联计划则更新计划下达数量
                    SiaSun.LMS.Model.PLAN_LIST mPLAN_LIST = this._P_PLAN_LIST.GetModel(mMANAGE_LIST.PLAN_LIST_ID);
                    if (null != mPLAN_LIST)
                    {
                        mPLAN_LIST.PLAN_LIST_ORDERED_QUANTITY += mMANAGE_LIST.MANAGE_LIST_QUANTITY;

                        if (mPLAN_LIST.PLAN_LIST_ORDERED_QUANTITY > mPLAN_LIST.PLAN_LIST_QUANTITY)
                        {
                            bResult = false;

                            sResult = string.Format("任务数量大于计划的未下达数量");

                            return bResult;
                        }

                        this._P_PLAN_LIST.Update(mPLAN_LIST);
                    }

                    //更新MANAGE_ID
                    mMANAGE_LIST.MANAGE_ID = mMANAGE_MAIN.MANAGE_ID;

                    this._P_MANAGE_LIST.Add(mMANAGE_LIST);
                }

                #endregion

                #region 更新货位
                WH_CELL wH_CELL_Start = this._P_WH_CELL.GetModel(mMANAGE_MAIN.START_CELL_ID);
                if (wH_CELL_Start != null)
                {
                    bResult = this._S_CellService.CellUpdateStatus(mMANAGE_MAIN.START_CELL_ID,
                                                                               string.Empty,
                                                                               SiaSun.LMS.Enum.RUN_STATUS.Selected.ToString(),
                                                                               out sResult);
                    if (!bResult)
                    {
                        return bResult;
                    }
                }

                WH_CELL wH_CELL_End = this._P_WH_CELL.GetModel(mMANAGE_MAIN.END_CELL_ID);
                if (wH_CELL_End != null)
                {
                    bResult = this._S_CellService.CellUpdateStatus(mMANAGE_MAIN.END_CELL_ID,
                                                                               string.Empty,
                                                                               SiaSun.LMS.Enum.RUN_STATUS.Selected.ToString(),
                                                                               out sResult);
                    if (!bResult)
                    {
                        return bResult;
                    }
                }
               

                #endregion

                #region 下架任务锁定出站台-Run-停用

                //if (mEND_WH_CELL.CELL_TYPE.Equals(SiaSun.LMS.Enum.CELL_TYPE.Station.ToString()))
                //{
                //    mEND_WH_CELL.RUN_STATUS = SiaSun.LMS.Enum.RUN_STATUS.Run.ToString();
                //    this._P_WH_CELL.Update(mEND_WH_CELL);
                //}

                #endregion

                #region 生成控制任务

                if (bAutoSendControl)
                {
                    bResult = this.ManageCreateControl(mMANAGE_MAIN.MANAGE_ID, false,out sResult);
                    if (!bResult)
                    {
                        return bResult;
                    }
                }

                #endregion
            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

                this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex);
            }
            finally
            {
                if (bResult)
                {
                    this._P_Base_House.CommitTransaction(bTrans);
                }
                else
                {
                    this._P_Base_House.RollBackTransaction(bTrans);
                }
            }

            return bResult;
        }

        /// <summary>管理-完成
        /// 管理-完成
        /// </summary>
        /// <param name="MANAGE_ID"></param>
        /// <param name="bTrans">是否独立事务</param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool ManageComplete(int MANAGE_ID, bool bTrans,out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            try
            {
                this._P_Base_House.BeginTransaction(bTrans);

                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.IO_CONTROL mIO_CONTROL = this._P_IO_CONTROL.GetModelManageID(mMANAGE_MAIN.MANAGE_ID);
                if ((null != mIO_CONTROL) && (!mIO_CONTROL.CONTROL_STATUS.Equals(999)))
                {
                    bResult = false;

                    sResult = string.Format("关联的控制任务未完成,索引[{0}]", mIO_CONTROL.CONTROL_ID);

                    return bResult;
                }

                //更新任务
                mMANAGE_MAIN.MANAGE_END_TIME = SiaSun.LMS.Common.StringUtil.GetDateTime();
                this._P_MANAGE_MAIN.Update(mMANAGE_MAIN);

                IList<SiaSun.LMS.Model.MANAGE_LIST> lsMANAGE_LIST = this._P_MANAGE_LIST.GetListManageID(mMANAGE_MAIN.MANAGE_ID);
                //更新计划列表
                foreach (SiaSun.LMS.Model.MANAGE_LIST mMANAGE_LIST in lsMANAGE_LIST)
                {
                    //若关联计划则更新计划下达数量
                    SiaSun.LMS.Model.PLAN_LIST mIO_PLAN_LIST = this._P_PLAN_LIST.GetModel(mMANAGE_LIST.PLAN_LIST_ID);
                    if (null != mIO_PLAN_LIST)
                    {
                        mIO_PLAN_LIST.PLAN_LIST_FINISHED_QUANTITY += mMANAGE_LIST.MANAGE_LIST_QUANTITY;

                        if (mIO_PLAN_LIST.PLAN_LIST_FINISHED_QUANTITY > mIO_PLAN_LIST.PLAN_LIST_QUANTITY)
                        {
                            bResult = false;

                            sResult= string.Format("任务数量大于计划的未下达数量");

                            return bResult;
                        }

                        this._P_PLAN_LIST.Update(mIO_PLAN_LIST);
                    }
                }

                //更新计划
                SiaSun.LMS.Model.PLAN_MAIN mPLAN_MAIN = this._P_PLAN_MAIN.GetModel(mMANAGE_MAIN.PLAN_ID);
                if (null != mPLAN_MAIN)
                {
                    bResult= this._S_PlanService.PlanCheckComplete(mMANAGE_MAIN.PLAN_ID,out sResult);
                    if (bResult)
                    {
                        bResult = this._S_PlanService.PlanComplete(mMANAGE_MAIN.PLAN_ID,false,out sResult);
                        if (!bResult)
                        {
                            return bResult;
                        }
                    }
                }

                //生成入出库记录
                bResult = this.ManageCreateRecord(mMANAGE_MAIN.MANAGE_ID,out sResult);
                if (!bResult)
                {
                    return bResult;
                }
            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

                this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex);
            }
            finally
            {
                if (bResult)
                {
                    this._P_Base_House.CommitTransaction(bTrans);
                }
                else
                {
                    this._P_Base_House.RollBackTransaction(bTrans);
                }
            }

            return bResult;
        }

        /// <summary>管理-故障
        /// 管理-故障
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool ManageError(int MANAGE_ID, bool bTrans, out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            try
            {
                this._P_Base_House.BeginTransaction(bTrans);

                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.IO_CONTROL mIO_CONTROL = this._P_IO_CONTROL.GetModelManageID(mMANAGE_MAIN.MANAGE_ID);
                if (null == mIO_CONTROL)
                {
                    bResult = false;

                    sResult = string.Format("管理任务索引[{0}]不存在控制任务", MANAGE_ID);

                    return bResult;
                }

                mMANAGE_MAIN.MANAGE_REMARK = mIO_CONTROL.ERROR_TEXT;

                mMANAGE_MAIN.MANAGE_STATUS = Enum.MANAGE_STATUS.Error.ToString();

                this._P_MANAGE_MAIN.Update(mMANAGE_MAIN);
            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

                this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex);
            }
            finally
            {
                if (bResult)
                {
                    this._P_Base_House.CommitTransaction(bTrans);
                }
                else
                {
                    this._P_Base_House.RollBackTransaction(bTrans);
                }
            }

            return bResult;
        }

        /// <summary>管理-取消
        /// 管理-取消
        /// </summary>
        /// <param name="MANAGE_ID"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool ManageCancel(int MANAGE_ID, bool bTrans,out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            SiaSun.LMS.Model.MANAGE_MAIN mMANAGE_MAIN = null;

            try
            {
                this._P_Base_House.BeginTransaction(bTrans);

                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.IO_CONTROL mIO_CONTROL = this._P_IO_CONTROL.GetModelManageID(mMANAGE_MAIN.MANAGE_ID);
                if ((null != mIO_CONTROL) && (!mIO_CONTROL.CONTROL_STATUS.Equals(900)))
                {
                    bResult = false;

                    sResult = string.Format("关联的控制任务未删除,索引[{0}]", mIO_CONTROL.CONTROL_ID);

                    return bResult;
                }

                bResult = this._S_CellService.CellUpdateStatus(mMANAGE_MAIN.START_CELL_ID, string.Empty, SiaSun.LMS.Enum.RUN_STATUS.Enable.ToString(),out sResult);
                if (!bResult)
                {
                    return bResult;
                }

                bResult = this._S_CellService.CellUpdateStatus(mMANAGE_MAIN.END_CELL_ID, string.Empty, SiaSun.LMS.Enum.RUN_STATUS.Enable.ToString(),out sResult);
                if (!bResult)
                {
                    return bResult;
                }

                foreach (SiaSun.LMS.Model.MANAGE_LIST mMANAGE_LIST in this._P_MANAGE_LIST.GetListManageID(MANAGE_ID))
                {
                    SiaSun.LMS.Model.PLAN_LIST mPLAN_LIST = this._P_PLAN_LIST.GetModel(mMANAGE_LIST.PLAN_LIST_ID);

                    if (null != mPLAN_LIST)
                    {
                        mPLAN_LIST.PLAN_LIST_ORDERED_QUANTITY -= mMANAGE_LIST.MANAGE_LIST_QUANTITY;

                        this._P_PLAN_LIST.Update(mPLAN_LIST);
                    }
                }

                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;

                this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex);
            }
            finally
            {
                if (bResult)
                {
                    this._P_Base_House.CommitTransaction(bTrans);

                    #region 生成系统日志

                    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);
                    string MESSAGE = string.Format("任务索引[{0}],起始位置[{1}],终止位置[{2}],容器条码[{3}]", MANAGE_ID, mSTART_WH_CELL.CELL_NAME, mEND_WH_CELL.CELL_NAME, mMANAGE_MAIN.STOCK_BARCODE.ToString());
                    this.CreateSYS_LOG("任务删除", "SYS", "1", MESSAGE);

                    #endregion
                }
                else
                {
                    this._P_Base_House.RollBackTransaction(bTrans);
                }
            }

            return bResult;
        }

        /// <summary>管理-执行
        /// 管理-执行
        /// </summary>
        /// <param name="MANAGE_ID"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool ManageExecute(int MANAGE_ID, bool bTrans,out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            try
            {
                this._P_Base_House.BeginTransaction(bTrans);

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

                mMANAGE_MAIN.MANAGE_REMARK = string.Empty;

                mMANAGE_MAIN.MANAGE_STATUS = Enum.MANAGE_STATUS.Executing.ToString();

                this._P_MANAGE_MAIN.Update(mMANAGE_MAIN);

                #region 发送大屏幕

                //bResult=this._S_LEDService.ledMessageCreate(mMANAGE_MAIN);

                #endregion
            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

                this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex);
            }
            finally
            {
                if (bResult)
                {
                    this._P_Base_House.CommitTransaction(bTrans);
                }
                else
                {
                    this._P_Base_House.RollBackTransaction(bTrans);
                }
            }

            return bResult;
        }

        /// <summary>管理-更改任务状态
        /// 管理-更改任务状态
        /// </summary>
        /// <param name="MANAGE_ID">任务编号</param>
        /// <param name="MANAGE_STATUS">任务状态</param>
        /// <returns></returns>
        public bool ManageUpdateStatus(int MANAGE_ID, string MANAGE_STATUS,out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

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

                mMANAGE_MAIN.MANAGE_STATUS = MANAGE_STATUS;

                this._P_MANAGE_MAIN.Update(mMANAGE_MAIN);
            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

                this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex);
            }

            return bResult;
        }

        #endregion

        #region MANAGE_TYPE

        public IList<SiaSun.LMS.Model.MANAGE_TYPE_PARAM> ManageTypeParamGetList(int MANAGE_TYPE_ID)
        {
            return this._P_MANAGE_TYPE_PARAM.GetList(MANAGE_TYPE_ID);
        }

        #endregion

        #region CONTROL

        /// <summary>管理系统下达控制任务
        /// 管理系统下达控制任务
        /// </summary>
        /// <param name="MANAGE_ID">管理任务索引</param>
        /// <param name="BEGIN_TRANSACTION">是否独立事务</param>
        /// <returns></returns>
        public bool ManageCreateControl(int MANAGE_ID,bool bTrans, out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            try
            {
                this._P_Base_House.BeginTransaction(bTrans);

                #region 校验

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

                IList<SiaSun.LMS.Model.MANAGE_LIST> lsMANAGE_LIST = this._P_MANAGE_LIST.GetListManageID(MANAGE_ID);
                if (lsMANAGE_LIST.Count<=0)
                {
                    bResult = false;

                    sResult = string.Format("管理任务明细[{0}]不存在", MANAGE_ID);

                    return bResult;
                }

                SiaSun.LMS.Model.IO_CONTROL mIO_CONTROL_EXISTS = this._P_IO_CONTROL.GetModelManageID(MANAGE_ID);
                //12101判断如果控制任务删的不及时,也应该通过申请入库ljc20221122
                if(mMANAGE_MAIN.START_CELL_ID!=16645)
                {
                if (null != mIO_CONTROL_EXISTS)
                {
                    bResult = false;

                    sResult = string.Format("管理任务索引[{0}]已存在控制任务索引[{1}]", MANAGE_ID, mIO_CONTROL_EXISTS.CONTROL_ID);

                    return bResult;
                }
                }
                bResult = this.ControlCheckRoute(mMANAGE_MAIN.START_CELL_ID, mMANAGE_MAIN.END_CELL_ID,out sResult);
                if (!bResult)
                {
                    return bResult;
                }

                #endregion

                SiaSun.LMS.Model.IO_CONTROL mIO_CONTROL = new SiaSun.LMS.Model.IO_CONTROL();

                SiaSun.LMS.Model.WH_CELL mSTART_CELL = this._P_WH_CELL.GetModel(mMANAGE_MAIN.START_CELL_ID);

                SiaSun.LMS.Model.WH_CELL mEND_CELL = this._P_WH_CELL.GetModel(mMANAGE_MAIN.END_CELL_ID);

                SiaSun.LMS.Model.WH_WAREHOUSE mSTART_WH_WAREHOUSE = this._P_WH_WAREHOUSE.GetModel_CELL_ID(mMANAGE_MAIN.START_CELL_ID);

                SiaSun.LMS.Model.WH_WAREHOUSE mEND_WH_WAREHOUSE = this._P_WH_WAREHOUSE.GetModel_CELL_ID(mMANAGE_MAIN.END_CELL_ID);

                string IN_OUT_TYPE = string.Format("{0}-{1}", mSTART_CELL.CELL_TYPE, mEND_CELL.CELL_TYPE);

                switch (IN_OUT_TYPE)
                {
                    case "Station-Cell"://站台-货位-入
                        mIO_CONTROL.CONTROL_TASK_TYPE = 1;
                        break;
                    case "Cell-Station"://货位-站台-出
                        mIO_CONTROL.CONTROL_TASK_TYPE = 2;
                        break;
                    case "Cell-Cell"://货位-货位-移
                        mIO_CONTROL.CONTROL_TASK_TYPE = 3;
                        break;
                    case "Station-Station"://站台-站台-移
                        mIO_CONTROL.CONTROL_TASK_TYPE = 4;
                        break;
                }

                switch (mMANAGE_MAIN.MANAGE_TYPE_CODE.ToString())
                {
                    case "101":
                    default:
                        mIO_CONTROL.CONTROL_TASK_LEVEL = "9";
                        break;
                }

                mIO_CONTROL.RELATIVE_CONTROL_ID = -1;

                mIO_CONTROL.MANAGE_ID = mMANAGE_MAIN.MANAGE_ID;

                mIO_CONTROL.STOCK_BARCODE = mMANAGE_MAIN.STOCK_BARCODE;

                mIO_CONTROL.PRE_CONTROL_STATUS = string.Empty;

                mIO_CONTROL.START_WAREHOUSE_CODE = mSTART_WH_WAREHOUSE.WAREHOUSE_CODE;

               //_CONTROL.START_DEVICE_CODE = mSTART_CELL.CELL_CODE;

                mIO_CONTROL.END_WAREHOUSE_CODE = mEND_WH_WAREHOUSE.WAREHOUSE_CODE;
                //如果是终点翻转货位,只给调度下移库任务,类型是2出库
                if(mEND_CELL.CELL_LOGICAL_NAME.Equals("FZ"))
                {
                    //LJC:cell表里面该字段是货位和翻转站台绑定号,一个货位就是一个翻转站台
                    mIO_CONTROL.END_DEVICE_CODE = mEND_CELL.LOCK_DEVICE_CODE;
                    mIO_CONTROL.CONTROL_TASK_TYPE = 2;
                    if (mSTART_CELL.CELL_TYPE.Equals("Station"))
                    {

                        mIO_CONTROL.CONTROL_TASK_TYPE = 4;
                    }
                }
                else 
                {
                    mIO_CONTROL.END_DEVICE_CODE = mEND_CELL.CELL_CODE;
                }
                //起点是翻转货位,那么给调度下入库任务,起点是翻转站台号2024LJC0509
                if (mSTART_CELL.CELL_LOGICAL_NAME.Equals("FZ"))
                {
                    //LJC:cell表里面该字段是货位和翻转站台绑定号,一个货位就是一个翻转站台
                    mIO_CONTROL.START_DEVICE_CODE=mSTART_CELL.LOCK_DEVICE_CODE;
                    mIO_CONTROL.CONTROL_TASK_TYPE = 1;
                }
                else
                {
                    mIO_CONTROL.START_DEVICE_CODE = mSTART_CELL.CELL_CODE;
                }

                //  mIO_CONTROL.END_DEVICE_CODE = mEND_CELL.CELL_CODE;

                mIO_CONTROL.CONTROL_STATUS = 0;

                mIO_CONTROL.ERROR_TEXT = string.Empty;

                mIO_CONTROL.CONTROL_BEGIN_TIME = SiaSun.LMS.Common.StringUtil.GetCurDateTimeString();

                mIO_CONTROL.CONTROL_END_TIME = string.Empty;
                //批次号
                //mIO_CONTROL.CONTROL_REMARK = lsMANAGE_LIST[0].GOODS_PROPERTY1;
                //按编码当批次LJC20221127
                mIO_CONTROL.CONTROL_REMARK = lsMANAGE_LIST[0].GOODS_PROPERTY2;
                this._P_IO_CONTROL.Add(mIO_CONTROL);

                bResult = this.ManageUpdateStatus(mMANAGE_MAIN.MANAGE_ID, SiaSun.LMS.Enum.MANAGE_STATUS.Waiting.ToString(),out sResult);
                if (!bResult)
                {
                    return bResult;
                }
            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

                this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex);
            }

            finally
            {
                if (bResult)
                {
                    this._P_Base_House.CommitTransaction(bTrans);
                }
                else
                {
                    this._P_Base_House.RollBackTransaction(bTrans);
                }
            }

            return bResult;
        }

        /// <summary>检查调度系统入出库路径是否可用
        /// 检查调度系统入出库路径是否可用
        /// </summary>
        /// <param name="START_CELL_ID"></param>
        /// <param name="END_CELL_ID"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        private bool ControlCheckRoute(int START_CELL_ID, int END_CELL_ID,out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            try
            {
                SiaSun.LMS.Model.WH_CELL mSTART_WH_CELL = this._P_WH_CELL.GetModel(START_CELL_ID);

                SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_ID);

                IList<SiaSun.LMS.Model.IO_CONTROL_ROUTE> lsIO_CONTROL_ROUTE = this._P_IO_CONTROL_ROUTE.GetList(mSTART_WH_CELL.DEVICE_CODE, mEND_WH_CELL.DEVICE_CODE);

                if (lsIO_CONTROL_ROUTE.Count == 0)
                {
                    bResult = false;

                    sResult = string.Format("起始位置[{0}]到终止位置[{1}]路径不可用", mSTART_WH_CELL.CELL_NAME, mEND_WH_CELL.CELL_NAME);

                    return bResult;
                }
            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

                this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex);
            }

            return bResult;
        }

        #endregion

        #region RECORD

        /// <summary>生成入出库记录-根据管理任务
        /// 生成入出库记录-根据管理任务
        /// </summary>
        /// <param name="MANAGE_ID"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool ManageCreateRecord(int MANAGE_ID,out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            SiaSun.LMS.Model.RECORD_MAIN mRECORD_MAIN = new SiaSun.LMS.Model.RECORD_MAIN();

            SiaSun.LMS.Model.RECORD_LIST mRECORD_LIST = new SiaSun.LMS.Model.RECORD_LIST();

            SiaSun.LMS.Model.RECORD_DETAIL mRECORD_DETAIL = new SiaSun.LMS.Model.RECORD_DETAIL();

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

                //生成RECORD_MAIN
                GOODS_TEMPLATE mGOODS_TEMPLATE = this._P_GOODS_TEMPLETE.GetModel(mMANAGE_MAIN.GOODS_TEMPLATE_ID);
                mRECORD_MAIN.GOODS_TEMPLATE_CODE = mGOODS_TEMPLATE == null ? string.Empty : mGOODS_TEMPLATE.GOODS_TEMPLATE_CODE;

                PLAN_MAIN mPLAN_MAIN = this._P_PLAN_MAIN.GetModel(mMANAGE_MAIN.PLAN_ID);
                mRECORD_MAIN.PLAN_CODE = mPLAN_MAIN == null ? string.Empty : mPLAN_MAIN.PLAN_CODE;

                mRECORD_MAIN.PLAN_TYPE_CODE = mMANAGE_MAIN.PLAN_TYPE_CODE;

                mRECORD_MAIN.MANAGE_TYPE_CODE = mMANAGE_MAIN.MANAGE_TYPE_CODE;

                mRECORD_MAIN.STOCK_BARCODE = mMANAGE_MAIN.STOCK_BARCODE;

                SiaSun.LMS.Model.WH_CELL mSTART_WH_CELL = this._P_WH_CELL.GetModel(mMANAGE_MAIN.START_CELL_ID);
                if (mSTART_WH_CELL != null)
                    mRECORD_MAIN.START_POSITION = mSTART_WH_CELL.CELL_NAME;

                SiaSun.LMS.Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(mMANAGE_MAIN.END_CELL_ID);
                if (mEND_WH_CELL != null)
                    mRECORD_MAIN.END_POSITION = mEND_WH_CELL.CELL_NAME;

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

                //生成RECORD_LIST
                foreach (SiaSun.LMS.Model.MANAGE_LIST mMANAGE_LIST in this._P_MANAGE_LIST.GetListManageID(MANAGE_ID))
                {
                    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.GOODS_PROPERTY1 = mMANAGE_LIST.GOODS_PROPERTY1;
                    mRECORD_LIST.GOODS_PROPERTY2 = mMANAGE_LIST.GOODS_PROPERTY2;
                    mRECORD_LIST.GOODS_PROPERTY5 = mMANAGE_LIST.GOODS_PROPERTY5;
                    mRECORD_LIST.GOODS_PROPERTY6 = mMANAGE_LIST.GOODS_PROPERTY6;
                    bResult = this._S_GoodsService.GoodsPropertySetValue(mMANAGE_LIST.GOODS_ID, mRECORD_LIST, mMANAGE_LIST, out sResult);

                    if (!bResult)
                    {
                        return bResult;
                    }

                    mRECORD_LIST.RECORD_LIST_REMARK = mMANAGE_LIST.MANAGE_LIST_REMARK;

                    this._P_RECORD_LIST.Add(mRECORD_LIST);

                    //生成RECORD_DETAIL
                    foreach (SiaSun.LMS.Model.MANAGE_DETAIL mMANAGE_DETAIL in this._P_MANAGE_DETAIL.GetListManageListID(mMANAGE_LIST.MANAGE_LIST_ID))
                    {
                        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);
                    }
                }
            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

                this._log.Fatal(string.Format("调用方法{0}发生异常。", MethodBase.GetCurrentMethod().Name), ex);
            }

            return bResult;
        }

        #endregion









        //====================以下为原来方法=================
        /// <summary>根据库存生成移库任务
        /// 根据库存生成移库任务
        /// </summary>
        /// <param name="mSYS_USER"></param>
        /// <param name="PLAN_LIST_ID"></param>
        /// <param name="STOCK_BARCODE"></param>
        /// <param name="START_CELL_ID"></param>
        /// <param name="END_CELL_ID"></param>
        /// <param name="bTrans"></param>
        /// <param name="bAutoSendControl"></param>
        /// <param name="bComplete"></param>
        /// <param name="sResult"></param>
        /// <param name="MANAGE_ID"></param>
        /// <returns></returns>
        public bool ManageCreate(SiaSun.LMS.Model.SYS_USER mSYS_USER,
                                   int PLAN_LIST_ID,
                                   string MANAGE_TYPE_CODE,
                                   string STOCK_BARCODE,
                                   int START_CELL_ID,
                                   int END_CELL_ID,
                                   bool bTrans,
                                   bool bAutoSendControl,
                                   bool bComplete, out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            int MANAGE_ID = 0;

            SiaSun.LMS.Model.WH_CELL mWH_CELL_START = this._P_WH_CELL.GetModel(START_CELL_ID);

            SiaSun.LMS.Model.WH_CELL mWH_CELL_END = this._P_WH_CELL.GetModel(END_CELL_ID);

            IList<SiaSun.LMS.Model.STORAGE_MAIN> lsSTORAGE_MAIN = null;

            if (STOCK_BARCODE == string.Empty)
                lsSTORAGE_MAIN = this._P_STORAGE_MAIN.GetListCellID(START_CELL_ID);
            else
                lsSTORAGE_MAIN = this._P_STORAGE_MAIN.GetListStockBarcode(STOCK_BARCODE);

            SiaSun.LMS.Model.PLAN_MAIN mPLAN_MAIN = null;

            SiaSun.LMS.Model.PLAN_LIST mPLAN_LIST = null;

            bResult = lsSTORAGE_MAIN.Count > 0;

            if (!bResult)
            {
                sResult = string.Format("未找到库存");

                return bResult;
            }


            if (this._P_MANAGE_MAIN.GetModelStockBarcode(lsSTORAGE_MAIN[0].STOCK_BARCODE) != null)
            {
                bResult = false;

                sResult = string.Format("托盘条码{0}已经存在任务", lsSTORAGE_MAIN[0].STOCK_BARCODE);

                return bResult;
            }

            try
            {
                this._P_Base_House.BeginTransaction(bTrans);

                if (!PLAN_LIST_ID.Equals(0))
                {
                    mPLAN_LIST = this._P_PLAN_LIST.GetModel(PLAN_LIST_ID);

                    mPLAN_MAIN = this._P_PLAN_MAIN.GetModel(mPLAN_LIST.PLAN_ID);
                }

                SiaSun.LMS.Model.MANAGE_MAIN mMANAGE_MAIN = new SiaSun.LMS.Model.MANAGE_MAIN();

                mMANAGE_MAIN.MANAGE_TYPE_CODE = MANAGE_TYPE_CODE;

                if (null != mPLAN_LIST)
                {
                    mMANAGE_MAIN.PLAN_ID = mPLAN_LIST.PLAN_ID;
                }
                else
                {
                    mMANAGE_MAIN.PLAN_ID = 0;
                }

                mMANAGE_MAIN.MANAGE_OPERATOR = mSYS_USER.USER_NAME;

                mMANAGE_MAIN.STOCK_BARCODE = lsSTORAGE_MAIN[0].STOCK_BARCODE;

                mMANAGE_MAIN.START_CELL_ID = START_CELL_ID;

                mMANAGE_MAIN.END_CELL_ID = END_CELL_ID;

                mMANAGE_MAIN.MANAGE_BEGIN_TIME = SiaSun.LMS.Common.StringUtil.GetDateTime();

                //mMANAGE_MAIN.MANAGE_STATUS = SiaSun.LMS.Enum.MANAGE_STATUS.WaitingSend.ToString();

                mMANAGE_MAIN.MANAGE_REMARK = string.Empty;

                this._P_MANAGE_MAIN.Add(mMANAGE_MAIN);

                SiaSun.LMS.Model.MANAGE_LIST mMANAGE_LIST = null;

                foreach (SiaSun.LMS.Model.STORAGE_MAIN mSTORAGE_MAIN in lsSTORAGE_MAIN)
                {
                    IList<SiaSun.LMS.Model.STORAGE_LIST> lsSTORAGE_LIST = this._P_STORAGE_LIST.GetListStorageID(mSTORAGE_MAIN.STORAGE_ID);

                    foreach (SiaSun.LMS.Model.STORAGE_LIST mSTORAGE_LIST in lsSTORAGE_LIST)
                    {

                        mMANAGE_LIST = new SiaSun.LMS.Model.MANAGE_LIST();

                        mMANAGE_LIST.MANAGE_ID = mMANAGE_MAIN.MANAGE_ID;

                        if (null != mPLAN_LIST)
                        {
                            mMANAGE_LIST.PLAN_LIST_ID = PLAN_LIST_ID;
                        }
                        else
                        {
                            mMANAGE_LIST.PLAN_LIST_ID = 0;
                        }

                        mMANAGE_LIST.STORAGE_LIST_ID = mSTORAGE_LIST.STORAGE_LIST_ID;

                        mMANAGE_LIST.GOODS_ID = mSTORAGE_LIST.GOODS_ID;

                        bResult = this._S_GoodsService.GoodsPropertySetValue(mSTORAGE_LIST.GOODS_ID, mMANAGE_LIST, mSTORAGE_LIST, out sResult);

                        if (!bResult)
                        {
                            return bResult;
                        }
                        mMANAGE_LIST.BOX_BARCODE = mSTORAGE_LIST.BOX_BARCODE;

                        mMANAGE_LIST.MANAGE_LIST_QUANTITY = mSTORAGE_LIST.STORAGE_LIST_QUANTITY;

                        mMANAGE_LIST.MANAGE_LIST_REMARK = mSTORAGE_LIST.STORAGE_LIST_REMARK;

                        this._P_MANAGE_LIST.Add(mMANAGE_LIST);

                        if ((null != mPLAN_LIST) && (mMANAGE_LIST.GOODS_ID == mPLAN_LIST.GOODS_ID))
                        {
                            mPLAN_LIST.PLAN_LIST_ORDERED_QUANTITY += mMANAGE_LIST.MANAGE_LIST_QUANTITY;

                            this._P_PLAN_LIST.Update(mPLAN_LIST);
                        }


                    }
                }

                if (mWH_CELL_START != null)
                {
                    bResult = this._S_CellService.CellUpdateStatus(START_CELL_ID, string.Empty, SiaSun.LMS.Enum.RUN_STATUS.Selected.ToString(), out sResult);

                    if (!bResult)
                    {
                        sResult = string.Format("更新开始货位{0}状态错误\n{1}", mWH_CELL_START.CELL_CODE, sResult);

                        this._P_Base_House.RollBackTransaction(bTrans);

                        return bResult;
                    }
                }

                if (mWH_CELL_END != null)
                {
                    bResult = this._S_CellService.CellUpdateStatus(END_CELL_ID, string.Empty, SiaSun.LMS.Enum.RUN_STATUS.Selected.ToString(), out sResult);

                    if (!bResult)
                    {
                        sResult = string.Format("更新结束货位{0}状态错误\n{1}", mWH_CELL_END.CELL_CODE, sResult);

                        this._P_Base_House.RollBackTransaction(bTrans);

                        return bResult;
                    }
                }

                MANAGE_ID = mMANAGE_MAIN.MANAGE_ID;

                if (bAutoSendControl)
                {
                    bResult = this.ManageDownLoad(MANAGE_ID, string.Empty, false, out sResult);

                    if (!bResult)
                    {
                        this._P_Base_House.RollBackTransaction(bTrans);

                        return bResult;
                    }
                }

                if (bComplete)
                {
                    bResult = this.ManageComplete(MANAGE_ID, false, out sResult);

                    if (!bResult)
                    {
                        this._P_Base_House.RollBackTransaction(bTrans);

                        return bResult;
                    }
                }

                sResult = string.Format("托盘{0}生成任务成功", mMANAGE_MAIN.STOCK_BARCODE);

                this._P_Base_House.CommitTransaction(bTrans);
            }
            catch (Exception ex)
            {
                this._P_Base_House.RollBackTransaction(bTrans);

                bResult = false;

                sResult = ex.Message;
            }

            return bResult;
        }


        /// <summary>完成
        /// 完成
        /// </summary>
        /// <param name="MANAGE_ID"></param>
        /// <param name="bTrans">是否独立事务</param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool ManageComplete(SiaSun.LMS.Model.MANAGE_MAIN mMANAGE_MAIN, bool bTrans, out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            try
            {
               
                this._P_Base_House.BeginTransaction(bTrans);


                mMANAGE_MAIN.MANAGE_END_TIME = SiaSun.LMS.Common.StringUtil.GetDateTime();

                this._P_MANAGE_MAIN.Update(mMANAGE_MAIN);

                //bResult = this._S_ManageService.RecordCreate(mMANAGE_MAIN.MANAGE_ID, out sResult);

                if (!bResult)
                {
                    sResult = string.Format("生成出入库记录错误-{0}", sResult);

                    return bResult;
                }

                

            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;
            }
            finally
            {
                if (bResult)
                {
                    this._S_LEDService.ledMessageCreate(mMANAGE_MAIN);

                    this._P_Base_House.CommitTransaction(bTrans);

                }
                else
                {
                    this._P_Base_House.RollBackTransaction(bTrans);
                }
            }

            return bResult;
        }

        /// <summary>管理-异常
        /// 管理-异常
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool ManageException(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.ToString());

                return bResult;
            }

            try
            {
                SiaSun.LMS.Model.WH_CELL mWH_CELL_START = this._P_WH_CELL.GetModel(mMANAGE_MAIN.START_CELL_ID);

                SiaSun.LMS.Model.WH_CELL mWH_CELL_END = this._P_WH_CELL.GetModel(mMANAGE_MAIN.END_CELL_ID);


                this._P_Base_House.BeginTransaction();

                

                if (mWH_CELL_START != null && mWH_CELL_START.CELL_TYPE == Enum.CELL_TYPE.Cell.ToString())
                {
                    bResult = this._S_CellService.CellUpdateStatus(mWH_CELL_START.CELL_ID, Enum.CELL_STATUS.Exception.ToString(), Enum.RUN_STATUS.Enable.ToString(), out sResult);

                    if (!bResult)
                    {
                        sResult = string.Format("更新起始位置{0} 状态错误\n", mWH_CELL_START.CELL_CODE.ToString());

                        this._P_Base_House.RollBackTransaction();


                        return bResult;
                    }
                }

                if (mWH_CELL_END != null && mWH_CELL_END.CELL_TYPE == Enum.CELL_TYPE.Cell.ToString())
                {
                    bResult = this._S_CellService.CellUpdateStatus(mWH_CELL_END.CELL_ID, Enum.CELL_STATUS.Exception.ToString(), Enum.RUN_STATUS.Enable.ToString(), out sResult);

                    if (!bResult)
                    {
                        sResult = string.Format("更新目标位置{0} 状态错误\n", mWH_CELL_START.CELL_CODE.ToString());

                        this._P_Base_House.RollBackTransaction();


                        return bResult;
                    }
                }


                SiaSun.LMS.Model.IO_CONTROL mIO_CONTROL = this._P_IO_CONTROL.GetModelManageID(mMANAGE_MAIN.MANAGE_ID);

                if (null == mIO_CONTROL)
                {
                    sResult = string.Format("未能找到管理任务索引{0}的控制任务", MANAGE_ID.ToString());

                    this._P_Base_House.RollBackTransaction();

                    return bResult;
                }

                mMANAGE_MAIN.MANAGE_REMARK = mIO_CONTROL.ERROR_TEXT;

                //mMANAGE_MAIN.MANAGE_STATUS = Enum.MANAGE_STATUS.ExceptionComplete.ToString();

                this._P_MANAGE_MAIN.Update(mMANAGE_MAIN);

                this._P_IO_CONTROL.DeleteManageID(mMANAGE_MAIN.MANAGE_ID);

                this._P_Base_House.CommitTransaction();
            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

                this._P_Base_House.RollBackTransaction();
            }

            return bResult;
        }

        /// <summary>
        /// 管理-故障
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool ManageError(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.ToString());

                return bResult;
            }

            try
            {
                this._P_Base_House.BeginTransaction();


                SiaSun.LMS.Model.IO_CONTROL mIO_CONTROL = this._P_IO_CONTROL.GetModelManageID(mMANAGE_MAIN.MANAGE_ID);

                if (null == mIO_CONTROL)
                {
                    bResult = false;

                    sResult = string.Format("未能找到管理任务索引{0}的控制任务", MANAGE_ID.ToString());

                    this._P_Base_House.RollBackTransaction();

                    return bResult;
                }

                mMANAGE_MAIN.MANAGE_REMARK = mIO_CONTROL.ERROR_TEXT;

                mMANAGE_MAIN.MANAGE_STATUS = Enum.MANAGE_STATUS.Error.ToString() ;

                this._P_MANAGE_MAIN.Update(mMANAGE_MAIN);

                this._P_Base_House.CommitTransaction();
            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

                this._P_Base_House.RollBackTransaction();
            }

            return bResult;
        }

        /// <summary>管理-取消
        /// 管理-取消
        /// </summary>
        /// <param name="MANAGE_ID"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool ManageCancel(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.ToString());

                return bResult;
            }

            SiaSun.LMS.Model.MANAGE_TYPE mMANAGE_TYPE = this._P_MANAGE_TYPE.GetModelManageTypeCode(mMANAGE_MAIN.MANAGE_TYPE_CODE);

            if (null == mMANAGE_TYPE)
            {
                bResult = false;

                sResult = string.Format("未能找到管理任务类型{0}", mMANAGE_MAIN.MANAGE_TYPE_CODE);

                return bResult;
            }

            SiaSun.LMS.Model.IO_CONTROL mIO_CONTROL = this._P_IO_CONTROL.GetModelManageID(MANAGE_ID);

            if (null != mIO_CONTROL && !mIO_CONTROL.CONTROL_STATUS.Equals(900))
            {
                bResult = false;

                sResult = string.Format("存在控制任务{0},先处理控制任务", mIO_CONTROL.CONTROL_ID);

                return bResult;
            }

            try
            {
                this._P_Base_House.BeginTransaction();

                bResult = this._S_CellService.CellUpdateStatus(mMANAGE_MAIN.START_CELL_ID, string.Empty, SiaSun.LMS.Enum.RUN_STATUS.Enable.ToString(), out sResult);

                if (!bResult)
                {
                    bResult = false;

                    sResult = string.Format("更新起始货位{0}状态错误\n{1}", mMANAGE_MAIN.START_CELL_ID.ToString(), sResult);

                    this._P_Base_House.RollBackTransaction();

                    return bResult;
                }

                bResult = this._S_CellService.CellUpdateStatus(mMANAGE_MAIN.END_CELL_ID, string.Empty, SiaSun.LMS.Enum.RUN_STATUS.Enable.ToString(), out sResult);

                if (!bResult)
                {
                    bResult = false;

                    sResult = string.Format("更新终止货位{0}状态错误\n{1}", mMANAGE_MAIN.END_CELL_ID.ToString(), sResult);

                    this._P_Base_House.RollBackTransaction();

                    return bResult;
                }

                if (mMANAGE_TYPE.MANAGE_TYPE_GROUP != "3")
                {
                    foreach (SiaSun.LMS.Model.MANAGE_LIST mMANAGE_LIST in this._P_MANAGE_LIST.GetListManageID(MANAGE_ID))
                    {
                        SiaSun.LMS.Model.PLAN_LIST mPLAN_LIST = this._P_PLAN_LIST.GetModel(mMANAGE_LIST.PLAN_LIST_ID);

                        if (null != mPLAN_LIST)
                        {
                            mPLAN_LIST.PLAN_LIST_ORDERED_QUANTITY -= mMANAGE_LIST.MANAGE_LIST_QUANTITY;

                            this._P_PLAN_LIST.Update(mPLAN_LIST);

                        }
                    }
                }

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

                if (bResult)
                {
                    this._S_LEDService.ledMessageCreate(mMANAGE_MAIN);

                }

                this._P_Base_House.CommitTransaction();              

            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

                this._P_Base_House.RollBackTransaction();
            }
            finally
            {
               
            }

            return bResult;
        }

        /// <summary>管理-执行
        /// 管理-执行
        /// </summary>
        /// <param name="MANAGE_ID"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool ManageExecute(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.ToString());

                return bResult;
            }

            try
            {

                this._P_Base_House.BeginTransaction();

                mMANAGE_MAIN.MANAGE_REMARK = string.Empty;

                mMANAGE_MAIN.MANAGE_STATUS = Enum.MANAGE_STATUS.Executing.ToString();

                this._P_MANAGE_MAIN.Update(mMANAGE_MAIN);

                if (!bResult)
                {
                    sResult = string.Format("任务状态更新错误\n{0}", sResult);

                    this._P_Base_House.RollBackTransaction();

                    return bResult;
                }

                this._P_Base_House.CommitTransaction();
            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

                this._P_Base_House.RollBackTransaction();
            }
            finally
            {
                if (bResult)
                {
                    this._S_LEDService.ledMessageCreate(mMANAGE_MAIN);
                    
                }
            }

            this._log.Info(string.Format("任务执行处理完毕{0} {1}", MethodBase.GetCurrentMethod().Name, MANAGE_ID));

            return bResult;
        }

        /// <summary>管理-下达 控制是否独立事务
        /// 管理-下达 控制是否独立事务
        /// </summary>
        /// <param name="MANAGE_ID"></param>
        /// <param name="bTrans"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool ManageDownLoad(int MANAGE_ID,string START_CELL_CODE, bool bTrans, out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            int END_CELL_ID =0;

            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.ToString());

                return bResult;
            }

            SiaSun.LMS.Model.WH_CELL mSTART_CELL = null;


            if (START_CELL_CODE == string.Empty)
            {
                mSTART_CELL = this._P_WH_CELL.GetModel(mMANAGE_MAIN.START_CELL_ID);

                if (null == mSTART_CELL)
                {
                    bResult = false;

                    sResult = string.Format("未能找到起始位置{0}", mSTART_CELL.CELL_CODE);

                    return bResult;
                }
            }
            else
            {
                mSTART_CELL = this._P_WH_CELL.GetModel(START_CELL_CODE);

                if (null == mSTART_CELL)
                {
                    bResult = false;

                    sResult = string.Format("未能找到起始位置{0}", mSTART_CELL.CELL_CODE);

                    return bResult;
                }
            }


            if (mMANAGE_MAIN.END_CELL_ID.Equals(0))
            {
                //出库任务
                if (mSTART_CELL.CELL_TYPE == Enum.CELL_TYPE.Cell.ToString())
                {
                    bResult = this._S_CellService.GetOutStation(mSTART_CELL.CELL_ID,                                                                 
                                                                  out END_CELL_ID,
                                                                  out sResult);

                    if (!bResult)
                    {
                        sResult = string.Format("未找到出库站台\n {0}", sResult);

                        return bResult;
                    }
                }
                //入库任务
                else
                {
                    bResult = this._S_CellService.CellInAllocate(mSTART_CELL.CELL_CODE,
                                                                 mMANAGE_MAIN.CELL_MODEL,
                                                                 mMANAGE_MAIN.MANAGE_ID,
                                                                 1,
                                                                 out END_CELL_ID,
                                                                 out sResult);

                    if (!bResult)
                    {
                        sResult = string.Format("分配货位失败\n {0}", sResult);

                        return bResult;
                    }
                }

                mMANAGE_MAIN.START_CELL_ID = mSTART_CELL.CELL_ID;

                mMANAGE_MAIN.END_CELL_ID = END_CELL_ID;
                
            }


            SiaSun.LMS.Model.WH_CELL mEND_CELL = this._P_WH_CELL.GetModel(mMANAGE_MAIN.END_CELL_ID);

            if (null == mEND_CELL)
            {
                bResult = false;

                sResult = string.Format("未能找到终止位置{0}", mEND_CELL.CELL_CODE);

                return bResult;
            }

            //路径校验
            bResult = this._P_IO_CONTROL_ROUTE.GetList(mSTART_CELL.DEVICE_CODE, mEND_CELL.DEVICE_CODE).Count > 0;

            if (!bResult)
            {
                sResult = string.Format("{0}-{1}之间无可用路径,请在监控系统中查看设备状态!", mSTART_CELL.CELL_CODE, mEND_CELL.CELL_CODE);

                return bResult;
            }

            try
            {

                this._P_Base_House.BeginTransaction(bTrans);

                SiaSun.LMS.Model.IO_CONTROL mIO_CONTROL = this._P_IO_CONTROL.GetModelManageID(MANAGE_ID);

                bResult = null == mIO_CONTROL;

                if (!bResult)
                {
                    sResult = string.Format("控制任务{0}已经存在!", MANAGE_ID.ToString());

                    return bResult;
                }

                int CONTROL_TASK_TYPE = 0;

                mIO_CONTROL = new SiaSun.LMS.Model.IO_CONTROL();

                string IN_OUT_TYPE = string.Format("{0}-{1}", mSTART_CELL.CELL_TYPE, mEND_CELL.CELL_TYPE).ToLower();

                switch (IN_OUT_TYPE)
                {
                    case "station-cell"://站台-货位-入

                        CONTROL_TASK_TYPE = Convert.ToInt32(SiaSun.LMS.Enum.CONTROL_TYPE.Up.ToString("d"));
                        mIO_CONTROL.CELL_GROUP = mEND_CELL.LANE_WAY;
                        break;

                    case "cell-station"://货位-站台-出

                        CONTROL_TASK_TYPE = Convert.ToInt32(SiaSun.LMS.Enum.CONTROL_TYPE.Down.ToString("d"));
                        mIO_CONTROL.CELL_GROUP = mSTART_CELL.LANE_WAY;
                        break;

                    case "cell-cell"://货位-货位-移

                        CONTROL_TASK_TYPE = Convert.ToInt32(SiaSun.LMS.Enum.CONTROL_TYPE.Move.ToString("d"));
                        break;

                    case "station-station"://站台-站台-移

                        CONTROL_TASK_TYPE = Convert.ToInt32(SiaSun.LMS.Enum.CONTROL_TYPE.MoveStation.ToString("d"));

                        break;
                }

                mIO_CONTROL.RELATIVE_CONTROL_ID = -1;
                mIO_CONTROL.MANAGE_ID = mMANAGE_MAIN.MANAGE_ID;
                mIO_CONTROL.STOCK_BARCODE = mMANAGE_MAIN.STOCK_BARCODE;
                
                mIO_CONTROL.CONTROL_TASK_LEVEL = string.IsNullOrEmpty(mMANAGE_MAIN.MANAGE_LEVEL) ? "0" : mMANAGE_MAIN.MANAGE_LEVEL;
                mIO_CONTROL.PRE_CONTROL_STATUS = string.Empty;
                mIO_CONTROL.CONTROL_TASK_TYPE = CONTROL_TASK_TYPE;
                mIO_CONTROL.START_DEVICE_CODE = mSTART_CELL.CELL_CODE;
                mIO_CONTROL.END_DEVICE_CODE = mEND_CELL.CELL_CODE;
                mIO_CONTROL.CONTROL_BEGIN_TIME = SiaSun.LMS.Common.StringUtil.GetDateTime();

                //单叉状态25 双叉状态0 string.IsNullOrEmpty(mMANAGE_MAIN.MANAGE_FORK) || !mMANAGE_MAIN.MANAGE_FORK.Equals("1") ? 0 : 25;
                mIO_CONTROL.CONTROL_STATUS = 0;
                mIO_CONTROL.CONTROL_REMARK = mMANAGE_MAIN.MANAGE_REMARK;
                mIO_CONTROL.START_WAREHOUSE_CODE = "1";
                mIO_CONTROL.END_WAREHOUSE_CODE = "1";

                this._P_IO_CONTROL.Add(mIO_CONTROL);

                mMANAGE_MAIN.MANAGE_STATUS = SiaSun.LMS.Enum.MANAGE_STATUS.Waiting.ToString();

                this._P_MANAGE_MAIN.Update(mMANAGE_MAIN);


            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;
            }
            finally
            {
                if (bResult)
                {
                    this._P_Base_House.CommitTransaction(bTrans);
                }
                else
                {
                    this._P_Base_House.RollBackTransaction(bTrans);
                }
            }

            return bResult;
        }
        public bool updateLedText(int CELL_ID, int LINE_NO, string Text)
        {
            
                bool bResult = true;
                string sResult = string.Empty;
                int LED_ID = 0;

                SiaSun.LMS.Model.WH_CELL wh_cell = this._P_WH_CELL.GetModel(CELL_ID);

                if (wh_cell == null)
                {
                    return false;
                }

             if (wh_cell.LANE_WAY=="1")
             {
                    LED_ID=1;
             }
             else if (wh_cell.LANE_WAY=="2")
             {
                    LED_ID = 2;
             }
             else if (wh_cell.LANE_WAY == "3")
             {
                    LED_ID = 3;
             }
             else
             {
                    LED_ID = 4;
             }

                SiaSun.LMS.Model.LED_LIST mLED_LIST = this._P_LED_LIST.GetModel(LED_ID, LINE_NO);

                if (mLED_LIST == null)
                {
                    bResult = false;

                     sResult = string.Format("设备{0}的显示屏不存在第{1}行,重新生成LED_LIST", LED_ID, LINE_NO);

                     return bResult;
                }

                //添加发送内容
                mLED_LIST.LINE_TEXT = Text;

                this._P_LED_LIST.Update(mLED_LIST);

                return bResult;
                      
        }

        public bool ManageInAndroid(MANAGE_MAIN mm, List<MANAGE_LIST> lManageList, out string sResult)
        {
            if (!mm.STOCK_BARCODE.Substring(0, 1).Equals("T"))
            {
                return this.Invoke("ManageIn", "ManageCreateMaterial", new object[] { mm, lManageList, true, true, false }, out sResult);
            }
            else
            {
                return this.Invoke("ManageIn", "ManageCreate", new object[] { mm, lManageList, true, true, false }, out sResult);
            }
        }

        public bool ManageOutAndroid(MANAGE_MAIN mm, List<MANAGE_LIST> lManageList, out string sResult)
        {
            
            //return this.Invoke("ManageOut", "ManageCreate", new object[] { mm, lManageList, true, true, true }, out sResult); ;
           return new ManageOut().ManageCreate(mm, lManageList, true, false, true , out sResult);
            
        }
    }
}