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;
using SiaSun.LMS.Implement.localhost1;

namespace SiaSun.LMS.Implement
{

    public class StorageBase : S_BaseService,SiaSun.LMS.Interface.I_StorageService
    {
        /// <summary>
        /// 库存增加(入库)
        /// </summary>
        /// <param name="MANAGE_ID"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool StorageCreate(int MANAGE_ID, out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            SiaSun.LMS.Model.STORAGE_LIST mSTORAGE_LIST;

            string sGOODS_PROPERTY_CONDITION = 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;
                }

                //查看托盘条码是否存在暂存区库存-存在,则更新库存位置为当前任务的终止位置
                SiaSun.LMS.Model.STORAGE_MAIN mSTORAGE_MAIN_STOCK_BARCODE = this._P_STORAGE_MAIN.GetModelStockBarcode(mMANAGE_MAIN.STOCK_BARCODE);

                if (mSTORAGE_MAIN_STOCK_BARCODE != null)
                {
                    Model.WH_CELL mWH_CELL_STOCK_BARCODE = this._P_WH_CELL.GetModel(mSTORAGE_MAIN_STOCK_BARCODE.CELL_ID);

                    if (mWH_CELL_STOCK_BARCODE != null)
                    {
                        Model.WH_AREA mWH_AREA_STOCK_BARCODE = this._P_WH_AREA.GetModel(mWH_CELL_STOCK_BARCODE.AREA_ID);

                        if ((mWH_AREA_STOCK_BARCODE != null) && (mWH_AREA_STOCK_BARCODE.AREA_TYPE.Equals(LMS.Enum.AREA_TYPE.XuNiKu.ToString())))
                        {
                            mSTORAGE_MAIN_STOCK_BARCODE.CELL_ID = mMANAGE_MAIN.END_CELL_ID;

                            this._P_STORAGE_MAIN.Update(mSTORAGE_MAIN_STOCK_BARCODE);
                        }
                    }
                }

                //查看是否有相同条件STORGE_MAIN
                SiaSun.LMS.Model.STORAGE_MAIN mSTORAGE_MAIN = this._P_STORAGE_MAIN.GetModelCellIDStockBarcode(mMANAGE_MAIN.END_CELL_ID, mMANAGE_MAIN.STOCK_BARCODE);

                //生成STORAGE_MAIN
                if (null == mSTORAGE_MAIN)
                {
                    mSTORAGE_MAIN = new SiaSun.LMS.Model.STORAGE_MAIN();

                    mSTORAGE_MAIN.GOODS_TEMPLATE_ID = mMANAGE_MAIN.GOODS_TEMPLATE_ID;

                    mSTORAGE_MAIN.CELL_ID = mMANAGE_MAIN.END_CELL_ID;

                    mSTORAGE_MAIN.STOCK_BARCODE = mMANAGE_MAIN.STOCK_BARCODE;

                    //mSTORAGE_MAIN.FULL_FLAG = string.IsNullOrEmpty(mMANAGE_MAIN.STOCK_BARCODE) ? SiaSun.LMS.Enum.FULL_FLAG.PART.ToString("d") : mMANAGE_MAIN.FULL_FLAG;
                    mSTORAGE_MAIN.FULL_FLAG = mMANAGE_MAIN.FULL_FLAG;

                    mSTORAGE_MAIN.CELL_MODEL = mMANAGE_MAIN.CELL_MODEL;

                    mSTORAGE_MAIN.STORAGE_REMARK = mMANAGE_MAIN.MANAGE_REMARK;

                    this._P_STORAGE_MAIN.Add(mSTORAGE_MAIN);
                }
                else
                {
                    //mSTORAGE_MAIN.FULL_FLAG = string.IsNullOrEmpty(mMANAGE_MAIN.STOCK_BARCODE) ? SiaSun.LMS.Enum.FULL_FLAG.PART.ToString("d") : mMANAGE_MAIN.FULL_FLAG;
                    mSTORAGE_MAIN.FULL_FLAG = mMANAGE_MAIN.FULL_FLAG;

                    mSTORAGE_MAIN.CELL_MODEL = mMANAGE_MAIN.CELL_MODEL;

                    mSTORAGE_MAIN.STORAGE_REMARK = mMANAGE_MAIN.MANAGE_REMARK;

                    this._P_STORAGE_MAIN.Update(mSTORAGE_MAIN);
                }

                IList<SiaSun.LMS.Model.MANAGE_LIST> lsMANAGE_LIST = this._P_MANAGE_LIST.GetListManageID(MANAGE_ID);

                foreach (SiaSun.LMS.Model.MANAGE_LIST mMANAGE_LIST in lsMANAGE_LIST)
                {
                    bResult = this._S_GoodsService.GetGoodsPropertyCondition(mMANAGE_LIST.GOODS_ID, true, mMANAGE_LIST, out sGOODS_PROPERTY_CONDITION, out sResult);

                    if (!bResult)
                    {
                        return bResult;
                    }

                    string strSQL = string.Format(@"SELECT * FROM V_STORAGE_LIST 
                                                      WHERE 1=1
                                                        AND CELL_ID = {0}
                                                        AND STORAGE_ID = {1}
                                                        AND GOODS_ID = {2}
                                                        AND {3}",
                                mMANAGE_MAIN.END_CELL_ID,
                                mSTORAGE_MAIN.STORAGE_ID,
                                mMANAGE_LIST.GOODS_ID,
                                sGOODS_PROPERTY_CONDITION);

                    DataTable dtSTORAGE_LIST = base.GetList(strSQL);
                    if (dtSTORAGE_LIST.Rows.Count > 0)
                    {
                        //取得STORAGE_LIST
                        mSTORAGE_LIST = this._P_STORAGE_LIST.GetModel(Convert.ToInt32(dtSTORAGE_LIST.Rows[0]["STORAGE_LIST_ID"].ToString()));

                        mSTORAGE_LIST.STORAGE_LIST_QUANTITY += mMANAGE_LIST.MANAGE_LIST_QUANTITY;

                        mSTORAGE_LIST.UPDATE_TIME = SiaSun.LMS.Common.StringUtil.GetCurDateTimeString();

                        this._P_STORAGE_LIST.Update(mSTORAGE_LIST);
                    }
                    else
                    {
                        //生成STORAGE_LIST
                        mSTORAGE_LIST = new SiaSun.LMS.Model.STORAGE_LIST();

                        mSTORAGE_LIST.STORAGE_ID = mSTORAGE_MAIN.STORAGE_ID;

                        mSTORAGE_LIST.PLAN_LIST_ID = mMANAGE_LIST.PLAN_LIST_ID;

                        mSTORAGE_LIST.BOX_BARCODE = mMANAGE_LIST.BOX_BARCODE;

                        mSTORAGE_LIST.STORAGE_LIST_QUANTITY = mMANAGE_LIST.MANAGE_LIST_QUANTITY;

                        mSTORAGE_LIST.GOODS_ID = mMANAGE_LIST.GOODS_ID;
                        //批次号
                        mSTORAGE_LIST.GOODS_PROPERTY1 = mMANAGE_LIST.GOODS_PROPERTY1;
                        //GY GK等
                        mSTORAGE_LIST.GOODS_PROPERTY2 = mMANAGE_LIST.GOODS_PROPERTY2;

                        mSTORAGE_LIST.GOODS_PROPERTY3 = mMANAGE_LIST.GOODS_PROPERTY3;
                        //ljc
                        mSTORAGE_LIST.GOODS_PROPERTY6 = "未翻转";
                        bResult = this._S_GoodsService.GoodsPropertySetValue(mMANAGE_LIST.GOODS_ID, mSTORAGE_LIST, mMANAGE_LIST, out sResult);

                        if (!bResult)
                        {
                            return bResult;
                        }

                        mSTORAGE_LIST.ENTRY_TIME = SiaSun.LMS.Common.StringUtil.GetCurDateTimeString();

                        mSTORAGE_LIST.UPDATE_TIME = SiaSun.LMS.Common.StringUtil.GetCurDateTimeString();

                        mSTORAGE_LIST.STORAGE_LIST_REMARK = mMANAGE_LIST.MANAGE_LIST_REMARK;

                        this._P_STORAGE_LIST.Add(mSTORAGE_LIST);
                    }

                    //生成STORAGE_DETAIL
                    IList<SiaSun.LMS.Model.MANAGE_DETAIL> lsMANAGE_DETAIL = this._P_MANAGE_DETAIL.GetListManageListID(mMANAGE_LIST.MANAGE_LIST_ID);
                    foreach (SiaSun.LMS.Model.MANAGE_DETAIL mMANAGE_DETAIL in lsMANAGE_DETAIL)
                    {
                        SiaSun.LMS.Model.STORAGE_DETAIL mSTORAGE_DETAIL = new SiaSun.LMS.Model.STORAGE_DETAIL();

                        mSTORAGE_DETAIL.STORAGE_LIST_ID = mSTORAGE_LIST.STORAGE_LIST_ID;

                        mSTORAGE_DETAIL.GOODS_BARCODE = mMANAGE_DETAIL.GOODS_BARCODE;

                        mSTORAGE_DETAIL.BOX_BARCODE = mMANAGE_DETAIL.BOX_BARCODE;

                        mSTORAGE_DETAIL.STORAGE_DETAIL_REMARK = mMANAGE_DETAIL.MANAGE_DETAIL_REMARK;

                        this._P_STORAGE_DETAIL.Add(mSTORAGE_DETAIL);
                    }
                    //更新mMANAGE_LIST.STORAGE_LIST_ID(生成RECORD_LIST的时候记录)
                    mMANAGE_LIST.STORAGE_LIST_ID = mSTORAGE_LIST.STORAGE_LIST_ID;

                    this._P_MANAGE_LIST.Update(mMANAGE_LIST);
                }
            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

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

            return bResult;
        }

        /// <summary>
        /// 库存减少(出库)
        /// </summary>
        /// <param name="MANAGE_ID"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool StorageDelete(int MANAGE_ID, 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;
                }

                IList<SiaSun.LMS.Model.MANAGE_LIST> lsMANAGE_LIST = this._P_MANAGE_LIST.GetListManageID(MANAGE_ID);

                SiaSun.LMS.Model.STORAGE_LIST mSTORAGE_LIST = null;

                SiaSun.LMS.Model.STORAGE_MAIN mSTORAGE_MAIN_OLD;

                foreach (SiaSun.LMS.Model.MANAGE_LIST mMANAGE_LIST in lsMANAGE_LIST)
                {
                    mSTORAGE_LIST = this._P_STORAGE_LIST.GetModel(mMANAGE_LIST.STORAGE_LIST_ID);

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

                        sResult = string.Format("库存索引{0}不存在", mMANAGE_LIST.STORAGE_LIST_ID);

                        return bResult;
                    }

                    //校验任务数量是否大于库存数量
                    if (mMANAGE_LIST.MANAGE_LIST_QUANTITY > mSTORAGE_LIST.STORAGE_LIST_QUANTITY)
                    {
                        bResult = false;

                        sResult = string.Format("任务数量大于库存数量");

                        return bResult;
                    }

                    mSTORAGE_MAIN_OLD = this._P_STORAGE_MAIN.GetModel(mSTORAGE_LIST.STORAGE_ID);

                    if (!string.IsNullOrEmpty(mSTORAGE_MAIN_OLD.STOCK_BARCODE))
                    {
                        mSTORAGE_MAIN_OLD.FULL_FLAG = SiaSun.LMS.Enum.FULL_FLAG.FULL.ToString("d");
                    }

                   // this._P_STORAGE_MAIN.Update(mSTORAGE_MAIN_OLD);

                    //更新库存列表的库存数量
                    mSTORAGE_LIST.STORAGE_LIST_QUANTITY -= mMANAGE_LIST.MANAGE_LIST_QUANTITY;

                    if (mSTORAGE_LIST.STORAGE_LIST_QUANTITY > 0)
                    {
                        this._P_STORAGE_LIST.Update(mSTORAGE_LIST);
                  ///下架移至暂存区ljc
                            mSTORAGE_MAIN_OLD.CELL_ID = 16644;

                            this._P_STORAGE_MAIN.Update(mSTORAGE_MAIN_OLD);

                    }
                    else
                    {
                        this._P_STORAGE_LIST.Delete(mSTORAGE_LIST.STORAGE_LIST_ID);

                        if (this._P_STORAGE_LIST.GetListStorageID(mSTORAGE_LIST.STORAGE_ID).Count == 0)
                        {
                            this._P_STORAGE_MAIN.Delete(mSTORAGE_LIST.STORAGE_ID);
                        }
                        else
                        {
                            ///下架移至暂存区ljc
                            mSTORAGE_MAIN_OLD.CELL_ID = 16644;

                            this._P_STORAGE_MAIN.Update(mSTORAGE_MAIN_OLD);
                        
                        }
                    }

                    IList<SiaSun.LMS.Model.MANAGE_DETAIL> lsMANAGE_DETAIL = this._P_MANAGE_DETAIL.GetListManageListID(mMANAGE_LIST.MANAGE_LIST_ID);
                    foreach (SiaSun.LMS.Model.MANAGE_DETAIL mMANAGE_DETAIL in lsMANAGE_DETAIL)
                    {
                        SiaSun.LMS.Model.STORAGE_DETAIL mSTORAGE_DETAIL = this._P_STORAGE_DETAIL.GetModelGoodsBarcode(mMANAGE_DETAIL.GOODS_BARCODE);
                        if (mSTORAGE_DETAIL != null)
                        {
                            this._P_STORAGE_DETAIL.Delete(mSTORAGE_DETAIL.STORAGE_DETAIL_ID);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

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

            return bResult;
        }

        /// <summary>库存移动(上架,下架)
        /// 库存-移动
        /// </summary>
        /// <param name="MANAGE_ID"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool StorageMove(int MANAGE_ID, 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;
                }

                SiaSun.LMS.Model.STORAGE_MAIN mSTORAGE_MAIN;

                SiaSun.LMS.Model.STORAGE_LIST mSTORAGE_LIST;

                IList<SiaSun.LMS.Model.MANAGE_LIST> lsMANAGE_LIST = this._P_MANAGE_LIST.GetListManageID(MANAGE_ID);

                foreach (SiaSun.LMS.Model.MANAGE_LIST mMANAGE_LIST in lsMANAGE_LIST)
                {
                    mSTORAGE_LIST = this._P_STORAGE_LIST.GetModel(mMANAGE_LIST.STORAGE_LIST_ID);

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

                        sResult = string.Format("库存列表索引{0}不存在", mMANAGE_LIST.STORAGE_LIST_ID);

                        return bResult;
                    }

                    mSTORAGE_MAIN = this._P_STORAGE_MAIN.GetModel(mSTORAGE_LIST.STORAGE_ID);

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

                        sResult = string.Format("库存索引{0}不存在", mSTORAGE_LIST.STORAGE_ID);

                        return bResult;
                    }

                    mSTORAGE_MAIN.CELL_MODEL = mMANAGE_MAIN.CELL_MODEL;

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

                    mSTORAGE_MAIN.CELL_ID = mEND_WH_CELL.CELL_TYPE.Equals(SiaSun.LMS.Enum.CELL_TYPE.Station.ToString()) ? 16644 : mEND_WH_CELL.CELL_ID;

                    this._P_STORAGE_MAIN.Update(mSTORAGE_MAIN);

                    mSTORAGE_LIST.UPDATE_TIME = SiaSun.LMS.Common.StringUtil.GetCurDateTimeString();
                    //ljc
                    mSTORAGE_LIST.GOODS_PROPERTY6 = mMANAGE_LIST.GOODS_PROPERTY6;
                    this._P_STORAGE_LIST.Update(mSTORAGE_LIST);
                }
            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

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

            return bResult;
        }


        /// <summary>
        /// 库存更改(配盘,取消配盘)
        /// </summary>
        /// <param name="MANAGE_ID"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool StorageChange(int MANAGE_ID, out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            string STOCK_BARCODE = string.Empty;

            string sGOODS_PROPERTY = string.Empty;

            SiaSun.LMS.Model.STORAGE_LIST mSTORAGE_LIST;

            SiaSun.LMS.Model.STORAGE_MAIN mSTORAGE_MAIN;

            SiaSun.LMS.Model.STORAGE_MAIN mSTORAGE_MAIN_OLD;

            string sGOODS_PROPERTY_CONDITION = 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;
                }

                STOCK_BARCODE = mMANAGE_MAIN.STOCK_BARCODE;

                IList<SiaSun.LMS.Model.MANAGE_LIST> lsMANAGE_LIST = this._P_MANAGE_LIST.GetListManageID(MANAGE_ID);

                foreach (SiaSun.LMS.Model.MANAGE_LIST mMANAGE_LIST in lsMANAGE_LIST)
                {
                    mSTORAGE_LIST = this._P_STORAGE_LIST.GetModel(mMANAGE_LIST.STORAGE_LIST_ID);
                    if (null == mSTORAGE_LIST)
                    {
                        bResult = false;

                        sResult = string.Format("库存列表索引[{0}]不存在", mMANAGE_LIST.STORAGE_LIST_ID);

                        return bResult;
                    }

                    //校验任务数量是否大于库存数量
                    if (mMANAGE_LIST.MANAGE_LIST_QUANTITY > mSTORAGE_LIST.STORAGE_LIST_QUANTITY)
                    {
                        bResult = false;

                        sResult = string.Format("任务数量大于库存数量");

                        return bResult;
                    }

                    mSTORAGE_MAIN_OLD = this._P_STORAGE_MAIN.GetModel(mSTORAGE_LIST.STORAGE_ID);

                    mSTORAGE_MAIN_OLD.FULL_FLAG = Enum.FULL_FLAG.PART.ToString("d");

                    this._P_STORAGE_MAIN.Update(mSTORAGE_MAIN_OLD);

                    //更新库存列表的库存数量
                    mSTORAGE_LIST.STORAGE_LIST_QUANTITY -= mMANAGE_LIST.MANAGE_LIST_QUANTITY;

                    if (mSTORAGE_LIST.STORAGE_LIST_QUANTITY > 0)
                    {
                        this._P_STORAGE_LIST.Update(mSTORAGE_LIST);
                    }

                    else
                    {
                        this._P_STORAGE_LIST.Delete(mSTORAGE_LIST.STORAGE_LIST_ID);

                        if (this._P_STORAGE_LIST.GetListStorageID(mSTORAGE_LIST.STORAGE_ID).Count == 0)
                        {
                            this._P_STORAGE_MAIN.Delete(mSTORAGE_LIST.STORAGE_ID);
                        }
                    }


                    //查看托盘条码是否存在暂存区库存-存在,则更新库存位置为当前任务的终止位置
                    SiaSun.LMS.Model.STORAGE_MAIN mSTORAGE_MAIN_STOCK_BARCODE = this._P_STORAGE_MAIN.GetModelStockBarcode(mMANAGE_MAIN.STOCK_BARCODE);

                    if (mSTORAGE_MAIN_STOCK_BARCODE != null)
                    {
                        Model.WH_CELL mWH_CELL_STOCK_BARCODE = this._P_WH_CELL.GetModel(mSTORAGE_MAIN_STOCK_BARCODE.CELL_ID);

                        if (mWH_CELL_STOCK_BARCODE != null)
                        {
                            Model.WH_AREA mWH_AREA_STOCK_BARCODE = this._P_WH_AREA.GetModel(mWH_CELL_STOCK_BARCODE.AREA_ID);

                            if ((mWH_AREA_STOCK_BARCODE != null) && (mWH_AREA_STOCK_BARCODE.AREA_TYPE.Equals(LMS.Enum.AREA_TYPE.XuNiKu.ToString())))
                            {
                                mSTORAGE_MAIN_STOCK_BARCODE.CELL_ID = mMANAGE_MAIN.END_CELL_ID;

                                this._P_STORAGE_MAIN.Update(mSTORAGE_MAIN_STOCK_BARCODE);
                            }
                        }
                    }


                    //查看是否有相同条件STORGE_MAIN
                    mSTORAGE_MAIN = this._P_STORAGE_MAIN.GetModelCellIDStockBarcode(mMANAGE_MAIN.END_CELL_ID, mMANAGE_MAIN.STOCK_BARCODE);
                    if (null == mSTORAGE_MAIN)
                    {
                        //生成STORAGE_MAIN
                        mSTORAGE_MAIN = new SiaSun.LMS.Model.STORAGE_MAIN();

                        mSTORAGE_MAIN.GOODS_TEMPLATE_ID = mMANAGE_MAIN.GOODS_TEMPLATE_ID;

                        mSTORAGE_MAIN.CELL_ID = mMANAGE_MAIN.END_CELL_ID;

                        mSTORAGE_MAIN.STOCK_BARCODE = STOCK_BARCODE;

                        mSTORAGE_MAIN.FULL_FLAG = mMANAGE_MAIN.FULL_FLAG;

                        mSTORAGE_MAIN.CELL_MODEL = mMANAGE_MAIN.CELL_MODEL;

                        mSTORAGE_MAIN.STORAGE_REMARK = mMANAGE_MAIN.MANAGE_REMARK;

                        this._P_STORAGE_MAIN.Add(mSTORAGE_MAIN);
                    }
                    else
                    {
                        mSTORAGE_MAIN.FULL_FLAG = mMANAGE_MAIN.FULL_FLAG;

                        mSTORAGE_MAIN.CELL_MODEL = mMANAGE_MAIN.CELL_MODEL;

                        mSTORAGE_MAIN.STORAGE_REMARK = mMANAGE_MAIN.MANAGE_REMARK;

                        this._P_STORAGE_MAIN.Update(mSTORAGE_MAIN);
                    }


                    //获得GOODS_PROPERTY组合查询条件
                    bResult = this._S_GoodsService.GetGoodsPropertyCondition(mMANAGE_LIST.GOODS_ID, true, mMANAGE_LIST, out sGOODS_PROPERTY_CONDITION, out sResult);
                    if (!bResult)
                    {
                        return bResult;
                    }

                    string strSQL = string.Format(@"SELECT * FROM V_STORAGE_LIST WHERE 1=1
                                                                    AND CELL_ID={0}
                                                                    AND STORAGE_ID={1}
                                                                    AND GOODS_ID={2}
                                                                    AND {3}",
                               mMANAGE_MAIN.END_CELL_ID,
                               mSTORAGE_MAIN.STORAGE_ID,
                               mMANAGE_LIST.GOODS_ID,
                               sGOODS_PROPERTY_CONDITION);

                    DataTable dtSTORAGE_LIST = base.GetList(strSQL);

                    if (dtSTORAGE_LIST.Rows.Count > 0)
                    {
                        mSTORAGE_LIST = this._P_STORAGE_LIST.GetModel(Convert.ToInt32(dtSTORAGE_LIST.Rows[0]["STORAGE_LIST_ID"].ToString()));

                        mSTORAGE_LIST.STORAGE_LIST_QUANTITY += mMANAGE_LIST.MANAGE_LIST_QUANTITY;

                        mSTORAGE_LIST.UPDATE_TIME = SiaSun.LMS.Common.StringUtil.GetCurDateTimeString();

                        this._P_STORAGE_LIST.Update(mSTORAGE_LIST);
                    }
                    else
                    {
                        //保留原STORAGE_LIST模型
                        SiaSun.LMS.Model.STORAGE_LIST STORAGE_LIST_OLD = mSTORAGE_LIST;

                        //生成STORAGE_LIST
                        mSTORAGE_LIST = new SiaSun.LMS.Model.STORAGE_LIST();

                        mSTORAGE_LIST.STORAGE_ID = mSTORAGE_MAIN.STORAGE_ID;

                        mSTORAGE_LIST.PLAN_LIST_ID = mMANAGE_LIST.PLAN_LIST_ID;

                        mSTORAGE_LIST.BOX_BARCODE = mMANAGE_LIST.BOX_BARCODE;

                        mSTORAGE_LIST.STORAGE_LIST_QUANTITY = mMANAGE_LIST.MANAGE_LIST_QUANTITY;

                        mSTORAGE_LIST.GOODS_ID = mMANAGE_LIST.GOODS_ID;

                        //根据管理列表物料属性设置库存列表物料属性
                        bResult = this._S_GoodsService.GoodsPropertySetValue(mSTORAGE_LIST.GOODS_ID, mSTORAGE_LIST, mMANAGE_LIST, out sResult);
                        if (!bResult)
                        {
                            return bResult;
                        }

                        //按原来模型入库时间
                        mSTORAGE_LIST.ENTRY_TIME = STORAGE_LIST_OLD == null ? SiaSun.LMS.Common.StringUtil.GetCurDateTimeString() : STORAGE_LIST_OLD.ENTRY_TIME;

                        mSTORAGE_LIST.UPDATE_TIME = SiaSun.LMS.Common.StringUtil.GetCurDateTimeString();

                        mSTORAGE_LIST.STORAGE_LIST_REMARK = mMANAGE_LIST.MANAGE_LIST_REMARK;

                        this._P_STORAGE_LIST.Add(mSTORAGE_LIST);
                    }
                }
            }
            catch (Exception ex)
            {
                bResult = false;

                sResult = ex.Message;

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

            return bResult;
        }


        /// <summary>
        /// 校验托盘是否是指定库存类型
        /// </summary>
        /// <param name="STOCK_BARCODE"></param>
        /// <param name="AREA_TYPE"></param>
        /// <param name="sResult"></param>
        /// <returns></returns>
        public bool StorageCheck(string STOCK_BARCODE,
                                 string AREA_TYPE,
                                 out string sResult)
        {
            bool bResult = true;

            sResult = string.Empty;

            DataTable dt = this.GetList(string.Format(@"SELECT * FROM V_STORAGE_LIST WHERE STOCK_BARCODE LIKE '%{0}%' {1}", STOCK_BARCODE,
                string.IsNullOrEmpty(AREA_TYPE.ToString()) ? string.Empty : string.Format(" AND AREA_TYPE = '{0}' ", AREA_TYPE.ToString())));

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

            return bResult;
        }

    }
}