/// <summary>
        /// 保存
        /// </summary>
        /// <param name="paramHead">UIModel</param>
        /// <returns></returns>
        public bool SaveDetailDS(WarehouseManagerUIModel paramHead, SkyCarBindingList <WarehouseBinManagerUIModel, MDLPIS_WarehouseBin> paramWarehouseBinList)
        {
            //服务端检查
            if (!ServerCheck(paramHead))
            {
                return(false);
            }

            #region 准备数据

            #region 仓库
            //将UIModel转为TBModel
            var argsWarehouse = paramHead.ToTBModelForSaveAndDelete <MDLPIS_Warehouse>();
            //判断主键是否被赋值
            if (string.IsNullOrEmpty(paramHead.WH_ID))
            {
                argsWarehouse.WH_ID          = Guid.NewGuid().ToString();
                argsWarehouse.WH_CreatedBy   = LoginInfoDAX.UserName;
                argsWarehouse.WH_CreatedTime = BLLCom.GetCurStdDatetime();
            }
            argsWarehouse.WH_UpdatedBy   = LoginInfoDAX.UserName;
            argsWarehouse.WH_UpdatedTime = BLLCom.GetCurStdDatetime();

            #endregion

            #region 仓位

            //添加的仓位
            if (paramWarehouseBinList != null && paramWarehouseBinList.InsertList != null &&
                paramWarehouseBinList.InsertList.Count > 0)
            {
                foreach (var loopDetailItem in paramWarehouseBinList.InsertList)
                {
                    loopDetailItem.WHB_WH_ID       = argsWarehouse.WH_ID ?? argsWarehouse.WHERE_WH_ID;
                    loopDetailItem.WHB_CreatedBy   = LoginInfoDAX.UserName;
                    loopDetailItem.WHB_CreatedTime = BLLCom.GetCurStdDatetime();
                    loopDetailItem.WHB_UpdatedBy   = LoginInfoDAX.UserName;
                    loopDetailItem.WHB_UpdatedTime = BLLCom.GetCurStdDatetime();
                }
            }
            #endregion

            #endregion

            #region 带事务的保存

            try
            {
                DBManager.BeginTransaction(DBCONFIG.Coeus);

                #region 保存仓库

                var saveWarehouseResult = _bll.Save(argsWarehouse, argsWarehouse.WH_ID);
                if (!saveWarehouseResult)
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);
                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.PIS_Warehouse });
                    return(false);
                }
                #endregion

                #region 保存仓位

                var saveWarehouseBinResult = _bll.UnitySave(paramWarehouseBinList);
                if (!saveWarehouseBinResult)
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);
                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.PIS_WarehouseBin });
                    return(false);
                }
                #endregion

                DBManager.CommitTransaction(DBCONFIG.Coeus);
            }
            catch (Exception ex)
            {
                DBManager.RollBackTransaction(DBCONFIG.Coeus);
                //保存[仓库]信息发生异常
                ResultMsg = MsgHelp.GetMsg(MsgCode.E_0018, new object[] { SystemActionEnum.Name.SAVE, ex.Message });
                LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, MethodBase.GetCurrentMethod().ToString(),
                                            ex.Message, "", null);
                return(false);
            }
            //将最新数据回写给DetailDS
            CopyModel(argsWarehouse, paramHead);
            #endregion

            #region 刷新缓存

            //刷新仓库缓存
            var resultWarehouseList = CacheDAX.Get(CacheDAX.ConfigDataKey.Warehouse) as List <MDLPIS_Warehouse>;
            List <MDLPIS_Warehouse> newWarehouseList = new List <MDLPIS_Warehouse>();
            if (resultWarehouseList != null)
            {
                newWarehouseList = resultWarehouseList;
                if (resultWarehouseList.All(x => x.WH_ID != argsWarehouse.WH_ID && x.WH_Name != argsWarehouse.WH_Name))
                {
                    newWarehouseList.Add(argsWarehouse);
                    CacheDAX.Add(CacheDAX.ConfigDataKey.Warehouse, newWarehouseList, true);
                }
            }
            else
            {
                newWarehouseList.Add(argsWarehouse);
                CacheDAX.Add(CacheDAX.ConfigDataKey.Warehouse, newWarehouseList, true);
            }

            //刷新仓位缓存
            if (paramWarehouseBinList == null)
            {
                return(true);
            }
            var resultWarehouseBinList = CacheDAX.Get(CacheDAX.ConfigDataKey.WarehouseBin) as List <MDLPIS_WarehouseBin>;
            List <MDLPIS_WarehouseBin> newWarehouseBinList = new List <MDLPIS_WarehouseBin>();
            if (resultWarehouseBinList != null)
            {
                newWarehouseBinList = resultWarehouseBinList;
                if (paramWarehouseBinList.InsertList != null && paramWarehouseBinList.InsertList.Count > 0)
                {
                    foreach (var loopInsertBin in paramWarehouseBinList.InsertList)
                    {
                        if (resultWarehouseBinList.All(x => x.WHB_ID != loopInsertBin.WHB_ID && x.WHB_Name != loopInsertBin.WHB_Name))
                        {
                            var tempWarehouseBin = new MDLPIS_WarehouseBin();
                            _bll.CopyModel(loopInsertBin, tempWarehouseBin);
                            newWarehouseBinList.Add(tempWarehouseBin);
                            CacheDAX.Add(CacheDAX.ConfigDataKey.WarehouseBin, newWarehouseBinList, true);
                        }
                    }
                }
                if (paramWarehouseBinList.DeleteList != null && paramWarehouseBinList.DeleteList.Count > 0)
                {
                    //待移除的仓位
                    List <MDLPIS_WarehouseBin> removeWarehouseBinList = new List <MDLPIS_WarehouseBin>();
                    foreach (var loopWarehouseBin in newWarehouseBinList)
                    {
                        var deleteWarehouseBin = paramWarehouseBinList.DeleteList.FirstOrDefault(x => x.WHB_ID == loopWarehouseBin.WHB_ID);
                        if (deleteWarehouseBin != null)
                        {
                            removeWarehouseBinList.Add(loopWarehouseBin);
                        }
                    }
                    foreach (var loopWarehouseBin in removeWarehouseBinList)
                    {
                        newWarehouseBinList.Remove(loopWarehouseBin);
                    }
                }
            }
            else
            {
                var tempWarehouseBinList = new List <MDLPIS_WarehouseBin>();
                _bll.CopyModelList(paramWarehouseBinList.InsertList, tempWarehouseBinList);
                newWarehouseBinList.AddRange(tempWarehouseBinList);
                CacheDAX.Add(CacheDAX.ConfigDataKey.WarehouseBin, newWarehouseBinList, true);
            }
            #endregion

            return(true);
        }
        /// <summary>
        /// 删除仓库
        /// </summary>
        public override void DeleteAction()
        {
            #region 准备数据

            //待删除的仓库列表
            List<MDLPIS_Warehouse> deleteWarehouseList = new List<MDLPIS_Warehouse>();
            //待删除的仓位列表
            List<MDLPIS_WarehouseBin> deleteWarehouseBinList = new List<MDLPIS_WarehouseBin>();
            if (tabControlFull.Tabs[SysConst.EN_DETAIL].Selected)
            {
                #region 详情删除

                #region 验证

                if (string.IsNullOrEmpty(txtWH_ID.Text.Trim()))
                {
                    //选择要删除的数据
                    MessageBoxs.Show(Trans.PIS, this.ToString(),
                        MsgHelp.GetMsg(MsgCode.W_0006,
                            new object[] { SystemTableEnums.Name.PIS_Warehouse, SystemActionEnum.Name.DELETE }),
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                //验证仓库是否已被使用
                StringBuilder warehouseIDs = new StringBuilder();
                warehouseIDs.Append(SysConst.Semicolon_DBC + txtWH_ID.Text + SysConst.Semicolon_DBC);
                //已被使用的仓库
                List<MDLPIS_Warehouse> usedWarehouseList = new List<MDLPIS_Warehouse>();
                _bll.QueryForList(SQLID.PIS_WarehouseManager_SQL01, new MDLPIS_Warehouse
                {
                    WHERE_WH_ID = warehouseIDs.ToString()
                }, usedWarehouseList);
                if (usedWarehouseList.Count > 0)
                {
                    //仓库已经被使用,不能删除
                    MessageBoxs.Show(Trans.PIS, this.ToString(), MsgHelp.GetMsg(MsgCode.W_0007, new object[]
                    { txtWH_Name.Text, MsgParam.APPLY, SystemActionEnum.Name.DELETE }), MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                //确认删除操作
                DialogResult dialogResult = MessageBoxs.Show(Trans.PIS, this.ToString(), MsgHelp.GetMsg(MsgCode.W_0012), MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                if (dialogResult != DialogResult.OK)
                {
                    return;
                }
                #endregion

                MDLPIS_Warehouse deleteWarehouse = new MDLPIS_Warehouse()
                {
                    WHERE_WH_ID = txtWH_ID.Text.Trim()
                };
                deleteWarehouseList.Add(deleteWarehouse);
                foreach (var loopWarehouseBin in _warehouseBinList)
                {
                    MDLPIS_WarehouseBin deleteWarehouseBin = new MDLPIS_WarehouseBin()
                    {
                        WHERE_WHB_ID = loopWarehouseBin.WHB_ID,
                    };
                    deleteWarehouseBinList.Add(deleteWarehouseBin);
                }
                #endregion
            }
            else
            {
                #region 列表删除

                #region 验证

                gdGrid.UpdateData();
                var checkedWarehouseList = HeadGridDS.Where(p => p.IsChecked == true).ToList();

                if (checkedWarehouseList.Count == 0)
                {
                    //请至少勾选一条仓库信息进行删除
                    MessageBoxs.Show(Trans.PIS, this.ToString(),
                        MsgHelp.GetMsg(MsgCode.W_0017,
                            new object[] { SystemTableEnums.Name.PIS_Warehouse, SystemActionEnum.Name.DELETE }),
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                //验证仓库是否已被使用
                StringBuilder warehouseIDs = new StringBuilder();
                warehouseIDs.Append(SysConst.Semicolon_DBC);
                foreach (var loopSelectedItem in checkedWarehouseList)
                {
                    warehouseIDs.Append(loopSelectedItem.WH_ID + SysConst.Semicolon_DBC);
                }
                //已被使用的仓库
                List<MDLPIS_Warehouse> usedWarehouseList = new List<MDLPIS_Warehouse>();
                _bll.QueryForList(SQLID.PIS_WarehouseManager_SQL01, new MDLPIS_Warehouse
                {
                    WHERE_WH_ID = warehouseIDs.ToString()
                }, usedWarehouseList);
                if (usedWarehouseList.Count > 0)
                {
                    StringBuilder warehouseName = new StringBuilder();
                    int i = 0;
                    foreach (var loopWarehouse in usedWarehouseList)
                    {
                        i++;
                        if (i == 1)
                        {
                            warehouseName.Append(loopWarehouse.WH_Name);
                        }
                        else
                        {
                            warehouseName.Append(SysConst.Comma_DBC + loopWarehouse.WH_Name);
                        }
                    }
                    //仓库已经被使用,不能删除
                    MessageBoxs.Show(Trans.PIS, this.ToString(), MsgHelp.GetMsg(MsgCode.W_0007, new object[] { warehouseName, MsgParam.APPLY, SystemActionEnum.Name.DELETE }), MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                //确认删除
                DialogResult dialogResult = MessageBoxs.Show(Trans.PIS, this.ToString(), MsgHelp.GetMsg(MsgCode.W_0013, new object[] { checkedWarehouseList.Count }), MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                if (dialogResult != DialogResult.OK)
                {
                    return;
                }

                #endregion

                _bll.CopyModelList(checkedWarehouseList, deleteWarehouseList);
                string warehouseIdStr = string.Empty;
                foreach (var loopSelectedItem in deleteWarehouseList)
                {
                    if (string.IsNullOrEmpty(loopSelectedItem.WH_ID))
                    {
                        continue;
                    }
                    loopSelectedItem.WHERE_WH_ID = loopSelectedItem.WH_ID;
                    warehouseIdStr += loopSelectedItem.WH_ID + SysConst.Semicolon_DBC;
                }
                //根据仓库ID查询仓位列表
                _bll.QueryForList(SQLID.PIS_WarehouseManager_SQL03, warehouseIdStr, deleteWarehouseBinList);
                #endregion
            }

            #endregion

            #region 删除数据
            if (deleteWarehouseList.Count > 0)
            {
                var deleteWarehouseResult = _bll.DeleteWarehouseAndBin(deleteWarehouseList, deleteWarehouseBinList);
                if (!deleteWarehouseResult)
                {
                    //删除失败
                    MessageBoxs.Show(Trans.PIS, this.ToString(), _bll.ResultMsg, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                //删除成功
                MessageBoxs.Show(Trans.PIS, this.ToString(), MsgHelp.GetMsg(MsgCode.I_0001, new object[] { SystemActionEnum.Name.DELETE }), MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            #endregion

            //4.清空【详情】画面数据
            InitializeDetailTabControls();
            //刷新列表
            RefreshList(true);

            //4.将DetailDS数据赋值给【详情】Tab内的对应控件
            SetDetailDSToCardCtrls();
            //将最新的值Copy到初始UIModel
            this.AcceptUIModelChanges();
        }