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

namespace SiaSun.LMS.Implement
{
    [ServiceBehavior(IncludeExceptionDetailInFaults = true,
     InstanceContextMode = InstanceContextMode.Single,
     ConcurrencyMode = ConcurrencyMode.Multiple,
     MaxItemsInObjectGraph = int.MaxValue)]
    public partial class S_PDAService : S_BaseService, SiaSun.LMS.Interface.I_PDAService
    {
        #region 操作方法

        public DataTable GetList(string strSQL)
        {
            return base.GetList(strSQL);
        }

        public object ExecuteScalar(string strSQL)
        {
            return base.ExecuteScalar(strSQL);
        }

        public ObjectT GetModel(string statementName, object parameterObject)
        {
            return base.GetModel(statementName, parameterObject);
        }

        public bool USER_LOGIN(string USER_CODE, string USER_PASSWORD, out SiaSun.LMS.Model.SYS_USER USER)
        {
            return base._S_SystemService.USER_LOGIN(USER_CODE, USER_PASSWORD, out USER);
        }

        #endregion

        #region 下达任务

        /// <summary>
        /// 手持设备【配盘】:仅配一种物料
        /// </summary>
        /// <param name="Opertator"></param>
        /// <param name="CELL_ID"></param>
        /// <param name="STORAGE_LIST_ID"></param>
        /// <param name="GOODS_QUANTITY"></param>
        /// <param name="STOCK_BARCODE"></param>
        /// <param name="FULL_FLAG"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool ManageCreateBindingPalm(string Opertator,
                                                    string GOODS_CODE,
                                                    decimal GOODS_QUANTITY,
                                                    string STOCK_BARCODE,
                                                    string FULL_FLAG,
                                                    out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            try
            {
                #region 生成MANAGE_MAIN

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

                mMANAGE_MAIN.PLAN_ID = 0;

                mMANAGE_MAIN.PLAN_TYPE_CODE = string.Empty;

                mMANAGE_MAIN.MANAGE_TYPE_CODE = SiaSun.LMS.Enum.MANAGE_TYPE.ManageInlocal.ToString();

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

                mMANAGE_MAIN.STOCK_BARCODE = STOCK_BARCODE;

                mMANAGE_MAIN.FULL_FLAG = FULL_FLAG;

                mMANAGE_MAIN.CELL_MODEL = string.Empty;

                mMANAGE_MAIN.START_CELL_ID = 0;

                mMANAGE_MAIN.END_CELL_ID = 0;

                mMANAGE_MAIN.MANAGE_OPERATOR = Opertator;

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


                #endregion

                #region 生成MANAGE_LIST

                List<SiaSun.LMS.Model.MANAGE_LIST> lsMANAGE_LIST = new List<SiaSun.LMS.Model.MANAGE_LIST>();

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

                //mMANAGE_LIST.GOODS_ID = mSTORAGE_LIST.GOODS_ID;

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

                //if (!bResult)
                //{
                //    return bResult;
                //}
                DataTable DT = this.GetList(string.Format(@"SELECT *FROM GOODS_MAIN WHERE GOODS_ID = '{0}'", GOODS_CODE));

                mMANAGE_LIST.PLAN_LIST_ID = 0;

                //mMANAGE_LIST.STORAGE_LIST_ID = mSTORAGE_LIST.STORAGE_LIST_ID;

                mMANAGE_LIST.MANAGE_LIST_QUANTITY = GOODS_QUANTITY;

                mMANAGE_LIST.MANAGE_ID = mMANAGE_MAIN.MANAGE_ID;

                mMANAGE_LIST.GOODS_ID = Convert.ToInt32(DT.Rows[0]["GOODS_ID"]);

                #endregion

                bResult =this.Invoke("ManageIn", "ManageCreate",
               new object[] {
                    mMANAGE_MAIN,
                    lsMANAGE_LIST,
                    true,//事务
                    true,//检查库存
                    true,//是否完成
                    false//是否下达任务
               }, out sResult);

                if (!bResult)
                {
                    sResult = string.Format("组盘任务下达失败\n{0}", sResult);

                    return bResult;
                }
                if (bResult)
                {
                    sResult = string.Format("组盘成功\n{0}", sResult);

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

                sResult = ex.Message;

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

            return bResult;
        }

        public bool PalletIn(string Opertator,
                                                    string STOCK_BARCODE,
                                                    string CELL_CODE,
                                                    out string sResult)
        {
            sResult = string.Empty;
            bool bResult = true;
            MANAGE_MAIN mANAGE_MAIN = this._P_MANAGE_MAIN.GetModelStockBarcode(STOCK_BARCODE);
            if (mANAGE_MAIN != null)
            {
                bResult = false;
                sResult = string.Format("托盘条码{0}存在管理任务", STOCK_BARCODE);
                return bResult;
            }
            IO_CONTROL iO_CONTROL = this._P_IO_CONTROL.GetModel_BY_STOCK_BARCODE(STOCK_BARCODE);
            if (iO_CONTROL != null)
            {
                bResult = false;
                sResult = string.Format("托盘条码{0}存在控制任务", STOCK_BARCODE);
                return bResult;
            }
            STORAGE_MAIN sTORAGE_MAIN = this._P_STORAGE_MAIN.GetModelStockBarcode(STOCK_BARCODE);
            if (sTORAGE_MAIN != null)
            {
                bResult = false;
                sResult = string.Format("托盘条码{0}存在库存", STOCK_BARCODE);
                return bResult;
            }
            iO_CONTROL = new IO_CONTROL()
            {
                STOCK_BARCODE = STOCK_BARCODE,
                START_DEVICE_CODE = CELL_CODE,
                END_DEVICE_CODE = "22070",
                MANAGE_ID = 0,
                CONTROL_STATUS = 0,
                CONTROL_TASK_TYPE = 4,
                CONTROL_TASK_LEVEL = "0",
                CONTROL_BEGIN_TIME = Common.StringUtil.GetDateTime()
        };
            this._P_IO_CONTROL.Add(iO_CONTROL);
            sResult = string.Format("组盘成功", sResult);
            return bResult;
        }
        /// <summary>
        /// 原材料废料回库
        /// </summary>
        /// <param name="Opertator"></param>
        /// <param name="STOCK_BARCODE"></param>
        /// <param name="CELL_CODE"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool ManageCreateWasteIn(string Opertator,
                                                    string STOCK_BARCODE,
                                                    string CELL_CODE,
                                                    out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            try
            {
                MANAGE_MAIN mANAGE_MAIN = this._P_MANAGE_MAIN.GetModelStockBarcode(STOCK_BARCODE);
                if (mANAGE_MAIN != null)
                {
                    bResult = false;
                    sResult = string.Format("废料回库任务下达失败托盘条码{0}存在管理任务", STOCK_BARCODE);
                    return bResult;
                }
                IO_CONTROL iO_CONTROL = this._P_IO_CONTROL.GetModel_BY_STOCK_BARCODE(STOCK_BARCODE);
                if (iO_CONTROL != null)
                {
                    bResult = false;
                    sResult = string.Format("废料回库任务下达失败托盘条码{0}存在控制任务", STOCK_BARCODE);
                    return bResult;
                }
                STORAGE_MAIN sTORAGE_MAIN = this._P_STORAGE_MAIN.GetModelStockBarcode(STOCK_BARCODE);
                if (sTORAGE_MAIN != null)
                {
                    bResult = false;
                    sResult = string.Format("废料回库任务下达失败托盘条码{0}存在库存", STOCK_BARCODE);
                    return bResult;
                }

                #region 生成MANAGE_MAIN

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

                mMANAGE_MAIN.PLAN_ID = 0;

                mMANAGE_MAIN.PLAN_TYPE_CODE = string.Empty;

                mMANAGE_MAIN.MANAGE_TYPE_CODE = SiaSun.LMS.Enum.MANAGE_TYPE.ManageInWaste.ToString();

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

                mMANAGE_MAIN.STOCK_BARCODE = STOCK_BARCODE;

                mMANAGE_MAIN.CELL_MODEL = "1";

                mMANAGE_MAIN.START_CELL_ID = 0;

                mMANAGE_MAIN.END_CELL_ID = 0;

                mMANAGE_MAIN.MANAGE_OPERATOR = Opertator;

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


                #endregion

                #region 生成MANAGE_LIST

                List<SiaSun.LMS.Model.MANAGE_LIST> lsMANAGE_LIST = new List<SiaSun.LMS.Model.MANAGE_LIST>();

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

                DataTable DT = this.GetList(string.Format(@"SELECT *FROM GOODS_MAIN WHERE GOODS_CODE = 'MFLSJX'"));

                mMANAGE_LIST.PLAN_LIST_ID = 0;

                //mMANAGE_LIST.STORAGE_LIST_ID = mSTORAGE_LIST.STORAGE_LIST_ID;

                mMANAGE_LIST.MANAGE_LIST_QUANTITY = 1;

                mMANAGE_LIST.MANAGE_ID = mMANAGE_MAIN.MANAGE_ID;

                mMANAGE_LIST.GOODS_PROPERTY1 = "废料";

                mMANAGE_LIST.GOODS_ID = Convert.ToInt32(DT.Rows[0]["GOODS_ID"]);

                lsMANAGE_LIST.Add(mMANAGE_LIST);
                #endregion

                bResult = this.Invoke("ManageIn", "ManageCreate",
               new object[] {
                    mMANAGE_MAIN,
                    lsMANAGE_LIST,
                    true,//事务
                    true,//检查库存
                    true,//是否完成
                    false//是否下达任务
               }, out sResult);

                if (!bResult)
                {
                    sResult = string.Format("组盘任务下达失败\n{0}", sResult);

                    return bResult;
                }
                if (bResult)
                {
                    iO_CONTROL = new IO_CONTROL()
                    {
                        STOCK_BARCODE = STOCK_BARCODE,
                        START_DEVICE_CODE = CELL_CODE,
                        END_DEVICE_CODE = "22071",
                        MANAGE_ID = 0,
                        CONTROL_STATUS = 0,
                        CONTROL_TASK_TYPE = 4,
                        CONTROL_TASK_LEVEL = "0",
                        CONTROL_BEGIN_TIME = SiaSun.LMS.Common.StringUtil.GetDate().ToString()
                    };
                    this._P_IO_CONTROL.Add(iO_CONTROL);
                    sResult = string.Format("组盘成功\n{0}", sResult);
                    return bResult;
                }
            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

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

            return bResult;
        }

        /// <summary>
        /// 原材料生产退料
        /// </summary>
        /// <param name="Opertator"></param>
        /// <param name="STOCK_BARCODE"></param>
        /// <param name="CELL_CODE"></param>
        /// <param name="goods_code"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool ManageCreateReturnIn(string Opertator,
                                                   string STOCK_BARCODE,
                                                   string CELL_CODE,
                                                   string goods_code,
                                                   out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            try
            {
                STORAGE_MAIN sTORAGE_MAIN = this._P_STORAGE_MAIN.GetModelStockBarcode(STOCK_BARCODE);
                if (sTORAGE_MAIN != null)
                {
                    bResult = false;
                    sResult = string.Format("已存在库存");

                    return bResult;
                }
                IO_CONTROL iO_CONTROL = this._P_IO_CONTROL.GetModel_BY_STOCK_BARCODE(STOCK_BARCODE);
                if (iO_CONTROL != null)
                {
                    bResult = false;
                    sResult = string.Format("已存在任务");
                    return bResult;
                }
                MANAGE_MAIN mANAGE_MAIN = this._P_MANAGE_MAIN.GetModelStockBarcode(STOCK_BARCODE);
                if (mANAGE_MAIN != null)
                {
                    bResult = false;
                    sResult = string.Format("已存在任务");
                    return bResult;
                }
                DataTable dt_record = this.GetList(string.Format(@"select top(1) * from V_RECORD_LIST where 
                                                                   goods_code = '{0}' 
                                                                   and GOODS_PROPERTY1 = '{1}' 
                                                                   and goods_property2 = '{2}' 
                                                                   and GOODS_PROPERTY3 = '{3}'
                                                                   ORDER BY MANAGE_END_TIME DESC ", 
                                                                   goods_code.Split('-')[0],//物料
                                                                   goods_code.Split('-')[2],//批次
                                                                   goods_code.Split('-')[1],//日期、供应商
                                                                   goods_code.Split('-')[3]));//包数
                if (dt_record == null || dt_record.Rows.Count < 1)
                {
                    bResult = false;
                    sResult = "未找到此物料的出库位置";
                    return bResult;
                }

                #region 生成MANAGE_MAIN

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

                mMANAGE_MAIN.PLAN_ID = 0;

                mMANAGE_MAIN.PLAN_TYPE_CODE = string.Empty;

                mMANAGE_MAIN.MANAGE_TYPE_CODE = SiaSun.LMS.Enum.MANAGE_TYPE.ManageInReturn.ToString();

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

                mMANAGE_MAIN.STOCK_BARCODE = STOCK_BARCODE;

                mMANAGE_MAIN.CELL_MODEL = "1";

                mMANAGE_MAIN.START_CELL_ID = 0;

                mMANAGE_MAIN.END_CELL_ID = 0;

                mMANAGE_MAIN.MANAGE_OPERATOR = Opertator;

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


                #endregion

                #region 生成MANAGE_LIST

                List<SiaSun.LMS.Model.MANAGE_LIST> lsMANAGE_LIST = new List<SiaSun.LMS.Model.MANAGE_LIST>();

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

                DataTable DT = this.GetList(string.Format(@"SELECT *FROM GOODS_MAIN WHERE GOODS_CODE = '{0}'", goods_code.Split('-')[0]));

                mMANAGE_LIST.PLAN_LIST_ID = 0;

                //mMANAGE_LIST.STORAGE_LIST_ID = mSTORAGE_LIST.STORAGE_LIST_ID;

                mMANAGE_LIST.MANAGE_LIST_QUANTITY = 1;

                mMANAGE_LIST.MANAGE_ID = mMANAGE_MAIN.MANAGE_ID;

                mMANAGE_LIST.GOODS_ID = Convert.ToInt32(DT.Rows[0]["GOODS_ID"]);

                //批次
                mMANAGE_LIST.GOODS_PROPERTY1 = goods_code.Split('-')[2];
                //日期/供应商
                mMANAGE_LIST.GOODS_PROPERTY2 = goods_code.Split('-')[1];
                //包数
                mMANAGE_LIST.GOODS_PROPERTY3 = goods_code.Split('-')[3];
                mMANAGE_LIST.STORAGE_LIST_ID = 0;

                lsMANAGE_LIST.Add(mMANAGE_LIST);

                #endregion

                bResult = this.Invoke("ManageIn", "ManageCreate",
               new object[] {
                    mMANAGE_MAIN,
                    lsMANAGE_LIST,
                    true,//事务
                    true,//检查库存
                    true,//是否完成
                    false//是否下达任务
               }, out sResult);

                if (!bResult)
                {
                    sResult = string.Format("组盘任务下达失败\n{0}", sResult);

                    return bResult;
                }
                if (bResult)
                {
                    IO_CONTROL iO_CONTROL1 = new IO_CONTROL()
                    {
                        STOCK_BARCODE = STOCK_BARCODE,
                        START_DEVICE_CODE = CELL_CODE,
                        END_DEVICE_CODE = "24",
                        MANAGE_ID = 0,
                        CONTROL_STATUS = 0,
                        CONTROL_TASK_TYPE = 4,
                        CONTROL_TASK_LEVEL = "0",
                        CONTROL_BEGIN_TIME = SiaSun.LMS.Common.StringUtil.GetDate().ToString()
                    };
                    this._P_IO_CONTROL.Add(iO_CONTROL1);
                    sResult = string.Format("组盘成功\n{0}", sResult);
                    return bResult;
                }
            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

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

            return bResult;
        }

        /// <summary>
        /// 容器下架
        /// </summary>
        /// <param name="GOODS_ID"></param>
        /// <param name="MANAGE_LIST_QUANTITY"></param>
        /// <param name="END_CELL_CODE"></param>
        /// <param name="Opertator"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool ManageStockOut(int GOODS_ID, decimal MANAGE_LIST_QUANTITY, string END_CELL_CODE, string Opertator, out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            try
            {
                #region 校验终止站台

                bResult = !string.IsNullOrEmpty(END_CELL_CODE);

                if (!bResult)
                {
                    bResult = false;

                    sResult = string.Format("请输入下架站台编码");

                    return bResult;
                }

                Model.WH_CELL mEND_WH_CELL = this._P_WH_CELL.GetModel(END_CELL_CODE);

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

                    sResult = string.Format("下架站台编码不存在");

                    return bResult;
                }

                int END_CELL_ID = mEND_WH_CELL.CELL_ID;

                #endregion

                if (MANAGE_LIST_QUANTITY < 1)
                {
                    bResult = false;

                    sResult = string.Format("请输入大于0的数量");

                    return bResult;
                }

                bResult = new StockOut().ManageCreate(Opertator, Enum.MANAGE_TYPE.StockOut.ToString(), GOODS_ID, string.Empty, MANAGE_LIST_QUANTITY, END_CELL_ID, true, true, out sResult);
            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

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

            return bResult;
        }



        /// <summary>
        /// 拣选出库
        /// </summary>
        /// <param name="Opertator"></param>
        /// <param name="STORAGE_LIST_ID"></param>
        /// <param name="PLAN_LIST_ID"></param>
        /// <param name="PLAN_TYPE_CODE"></param>
        /// <param name="GOODS_QUANTITY"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool ManageConfirm(string STOCK_BARCODE,
                                                    int manage_out_num,
                                                    string Opertator,
                                                    out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            //SiaSun.LMS.Model.PLAN_MAIN mPLAN_MAIN = null;

            try
            {
                #region 校验

                #region 校验容器条码格式

                bResult = !string.IsNullOrEmpty(STOCK_BARCODE.ToUpper());

                if (!bResult)
                {
                    bResult = false;

                    sResult = string.Format("请输入配盘容器条码");

                    return bResult;
                }

                #endregion

                #region 原库存列表是否存在

                DataTable storage_stock_barcode = this.GetList(string.Format(@"SELECT *FROM V_STORAGE_LIST WHERE STOCK_BARCODE = '{0}'
                                                              AND AREA_TYPE = 'XuNiKu'", STOCK_BARCODE));

                if (storage_stock_barcode.Rows.Count == 0)
                {
                    bResult = false;

                    sResult = string.Format("所选库存条码{0}不再暂存区", STOCK_BARCODE);

                    return bResult;
                }

                #endregion


                #endregion

                #region 生成MANAGE_MAIN

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

                mMANAGE_MAIN.PLAN_ID = 0;

                mMANAGE_MAIN.PLAN_TYPE_CODE = string.Empty;

                mMANAGE_MAIN.MANAGE_TYPE_CODE = SiaSun.LMS.Enum.MANAGE_TYPE.ManageOut.ToString();

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

                mMANAGE_MAIN.STOCK_BARCODE = STOCK_BARCODE;

                //mMANAGE_MAIN.FULL_FLAG = FULL_FLAG;

                mMANAGE_MAIN.CELL_MODEL = string.Empty;

                mMANAGE_MAIN.START_CELL_ID = 0;

                mMANAGE_MAIN.END_CELL_ID = 0;

                mMANAGE_MAIN.MANAGE_OPERATOR = Opertator;

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

                //this._P_MANAGE_MAIN.Add(mMANAGE_MAIN);

                #endregion

                #region 生成MANAGE_LIST

                List<SiaSun.LMS.Model.MANAGE_LIST> lsMANAGE_LIST = new List<SiaSun.LMS.Model.MANAGE_LIST>();

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

                DataTable MANAGE_LIST_OUT = this.GetList(string.Format(@"SELECT *FROM V_STORAGE_LIST WHERE STOCK_BARCODE = '{0}'", STOCK_BARCODE));

                mMANAGE_LIST.PLAN_LIST_ID = 0;

                mMANAGE_LIST.STORAGE_LIST_ID = Convert.ToInt32(MANAGE_LIST_OUT.Rows[0]["STORAGE_LIST_ID"]);

                mMANAGE_LIST.MANAGE_LIST_QUANTITY = manage_out_num;

                mMANAGE_LIST.MANAGE_ID = mMANAGE_MAIN.MANAGE_ID;

                mMANAGE_LIST.GOODS_ID = Convert.ToInt32(MANAGE_LIST_OUT.Rows[0]["GOODS_ID"]);

                //mMANAGE_LIST.MANAGE_LIST_REMARK = mSTORAGE_LIST.STORAGE_LIST_REMARK;

                lsMANAGE_LIST.Add(mMANAGE_LIST);

                #endregion

                bResult = new ManageOut().ManageCreate(mMANAGE_MAIN, lsMANAGE_LIST, true, true, true, out sResult);

                if (!bResult)
                {
                    sResult = string.Format("拣选出库失败\n{0}", sResult);

                    return bResult;
                }
                if (bResult)
                {
                    sResult = string.Format("拣选出库成功\n{0}", sResult);

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

                sResult = ex.Message;

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

            return bResult;

        }


        /// <summary>
        /// 此方法用于原料库计划出库手持出库确认,任务状态必须是Complete
        /// </summary>
        /// <param name="STOCK_BARCODE"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool ManagePlanOutConfirm(string STOCK_BARCODE,out string sResult)
        {
            bool bResult = true;
            sResult = string.Empty;
            Model.MANAGE_MAIN mANAGE_MAIN = this._P_MANAGE_MAIN.GetModelStockBarcode(STOCK_BARCODE);
            if (mANAGE_MAIN == null || !mANAGE_MAIN.MANAGE_STATUS.Equals("Complete"))
            {
                sResult = string.Format(@"托盘条码:{0}不存在已完成的管理任务",STOCK_BARCODE);
                bResult = false;
                return bResult;
            }
            IO_CONTROL iO_CONTROL = _P_IO_CONTROL.GetModel_BY_STOCK_BARCODE(STOCK_BARCODE);
            if (iO_CONTROL == null || iO_CONTROL.CONTROL_STATUS != 999)
            {
                sResult = string.Format(@"托盘条码:{0}不存在已完成的控制任务", STOCK_BARCODE);
                bResult = false;
                return bResult;
            }
            MANAGE_TYPE mMANAGE_TYPE = _P_MANAGE_TYPE.GetModelManageTypeCode(mANAGE_MAIN.MANAGE_TYPE_CODE);
            bResult = this.Invoke(mMANAGE_TYPE.MANAGE_TYPE_CLASS, "ManageComplete", new object[] { mANAGE_MAIN.MANAGE_ID, true }, out sResult);
            if (!bResult)
            {
                sResult = string.Format("出库确认失败!{0}", sResult);
                return bResult;
            }
            else
            {
                sResult = string.Format("出库确认成功");
                return bResult;
            }
        }

        #endregion
    }
}